如何正确克隆(jQuery)通过饼图应用样式的元素?

如何正确克隆(jQuery)通过饼图应用样式的元素?,jquery,internet-explorer-8,css3pie,Jquery,Internet Explorer 8,Css3pie,我已经在一个新项目中成功地使用了.htc版本的(该项目将专门针对IE8+),但是,我在尝试克隆应用了饼图样式的元素时遇到了问题 我得到了一个JSFIDLE来说明这个问题,输入是受欢迎的(甚至是其他类似于PIE的方法/替代方法)-但是,.htc文件不能跨域引用,所以这个FIDLE只包含我使用的实际标记和CSS 感谢您的帮助。这可能是什么原因造成的,是否存在潜在的解决办法 干杯, peol克隆具有饼状子体的元素时会遇到两个问题: PIE插入的VML元素也将包含在克隆的内容中,但由于某些原因,它们被错

我已经在一个新项目中成功地使用了
.htc
版本的(该项目将专门针对IE8+),但是,我在尝试克隆应用了饼图样式的元素时遇到了问题

我得到了一个JSFIDLE来说明这个问题,输入是受欢迎的(甚至是其他类似于PIE的方法/替代方法)-但是,
.htc
文件不能跨域引用,所以这个FIDLE只包含我使用的实际标记和CSS

感谢您的帮助。这可能是什么原因造成的,是否存在潜在的解决办法

干杯,
peol

克隆具有饼状子体的元素时会遇到两个问题:

  • PIE插入的VML元素也将包含在克隆的内容中,但由于某些原因,它们被错误克隆,没有名称空间前缀,并且
  • PIE放在每个目标元素上的唯一_pieId属性也会复制到克隆中,这会导致不再唯一的ID之间发生冲突
  • 所以,为了做一个正确的克隆,我们需要把两者都去掉。第一种方法是,在克隆并恢复每个饼图元素时,将其行为样式属性临时设置为“无”。将其设置为“无”将触发PIE的清理方法,该方法将删除所有VML元素。第二项必须手动完成,因为PIE不会自动删除_pieId属性。这两种方法都很容易编写脚本

    下面是一个自定义jQuery扩展,它在我的有限测试中处理此问题:

    jQuery.fn.cloneWithPIE = function(dataAndEvents, deepDataAndEvents) {
        // Find elements with PIE attached and remove their behaviors:
        var pied = this.find('[_pieId]').css('behavior', 'none');
    
        // Perform the clone:
        var clone = this.clone(dataAndEvents, deepDataAndEvents);
    
        // Remove the _pieId from each of the original and cloned 
        // elements, and restore the behavior:
        pied.add(clone.find('[_pieId]')).removeAttr('_pieId').css('behavior', '');
    
        return clone;
    }
    
    然后调用cloneWithPIE方法,就像调用普通克隆方法一样:

    $('.someEl').cloneWithPIE().appendTo(newParent)
    

    希望对您有用。

    我也遇到了同样的问题,您找到解决方案了吗?我已将PIE应用于未继承.htc修复程序的克隆元素的子元素-可能是使用javascript版本的PIE可能是答案。很抱歉,响应太慢,我没有收到您的回复电子邮件,我在第二天开始了一个新项目。:)谢谢你的回答,我甚至不记得我是如何解决的,但我认为这是一个类似的方法。干杯这太棒了!非常感谢你!