Skip to main content
 首页 » 编程设计

Internet Explorer 7 中的 jQuery 1.6.4 克隆问题

2026年07月28日7落叶无声

我正在使用 jQuery v1.6.4。 这是我的问题的测试用例:

  <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
         <script type="text/javascript" src="jquery.js"></script> 
    </head> 
    <body> 
 
        <div id="container"></div> 
        <div id="clone-tpl">I am a clone template</div> 
 
        <script type="text/javascript"> 
              $(function(){ 
                var clone = $('#clone-tpl').clone(); 
                clone.attr('id','other'+Math.random()); 
                clone.text('I am a clone'); 
                $('#container').append(clone); 
                alert($('#container').html());   
                alert($('#clone-tpl').attr('id')); 
 
                var clone2 = $('#clone-tpl').clone(); 
                clone2.attr('id','other'+Math.random()); 
                clone2.text('I am a clone 2'); 
                $('#container').append(clone2); 
                alert($('#container').html());   
                alert($('#clone-tpl').attr('id'));  
            }); 
         </script>   
        </body> 
    </html> 

在 Mozilla Firefox 和 Internet Explorer 9 中,它按预期工作:克隆 clone-tpl 两次,更改 id 并将克隆附加到容器 div。容器 div 保持不变。 警报输出日志如下:

<div id="other0.7574357943876624">I am a clone</div> 
clone-tpl 
<div id="other0.7574357943876624">I am a clone</div><div id="other0.1724491511655708">I am a clone 2</div> 
clone-tpl 

但是在 Internet Explorer 7 上,它会将克隆 2 搞乱,看看警报说了什么:

<DIV id=other0.1851332940530379>I am a clone</DIV> 
clone-tpl 
<DIV id=other0.1851332940530379>I am a clone</DIV><DIV id=clone-tpl>I am a clone 2</DIV> 
other0.6041996510541515 

我不知道,alert($('#clone-tpl').attr('id'))怎么会突然给出除了clone-tpl之外的其他东西?毕竟,如果我通过 id 属性clone-tpl 选择元素,则 id 属性必须是clone-tpl,但事实并非如此!

出了什么问题?如果我创建第二个克隆,为什么 IE7 会更改克隆源的 id?

顺便说一句,如果我恢复到 jQuery v1.4.2,IE7 会正常开始克隆。

这是 jQuery v1.6.4 中的错误吗?有什么解决办法吗?

附注 我真的很想避免恢复到 1.4.2,因为 1.6 有一些有用的功能,可以帮助我克服其他一些 jQuery 错误:http://bugs.jquery.com/ticket/5684?version=10 .

请您参考如下方法:

我也遇到了 IE 克隆问题

当厌倦了 bug 时,最终不得不为 IE 编写自己的简单克隆。 它不通用,也不出色,但在这种情况下它不能做太多事情,IE 很糟糕。

可以根据自己的需要进行修改。

function shimNode(jqObj){    
    var html = jqObj.html(); 
    var id = jqObj[0].id; 
    var classes = jqObj.attr('class'); 
    var styles = jqObj.attr('style'); 
    var pattern = ['<div id="',id,'" class="',classes,'" style="',styles,'">',html,'</div>'].join(''); 
 
    return jQuery(pattern); 
}