2011-09-24 50 views
5

我正在使用jQuery v1.6.4。 這裏是我的問題測試用例:jQuery 1.6.4 Internet Explorer 7中的克隆問題

<!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中按預期工作:克隆克隆TPL兩次,改變ID並追加克隆到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中它攪亂東西與clone2,看看有什麼警告說:

<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中的錯誤嗎?有沒有解決方法?

P.S. 我真的想避免回覆到1.4.2,因爲1.6有一些有用的功能,可以幫助我克服其他一些jQuery bug:http://bugs.jquery.com/ticket/5684?version=10

+4

好像它是一個錯誤http://stackoverflow.com/questions/7243384/jquery-clone-html-in-ie-bug – Mansuro

+1

@Mansuro - 謝謝你,你是對的。我剛剛在jQuery bug跟蹤器網站上發現它,讓我們希望他們能儘快修復它。同時我會使用Javascript原生setAttribute,它工作得很好。 – JustAMartin

回答

2

我有克隆的問題與IE瀏覽器,也

最後只好寫我自己的簡單克隆的IE時累的bug。 這不是通用的,也沒有輝煌的,但在這種情況下,它不能做得太多,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); 
}