2011-09-24 12 views
5

jQuery v1.6.4を使用しています。 は、ここに私の問題のためのテストケースである:MozillaのFirefoxとInternet Explorer 9ので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> 

期待どおりに動作します:クローンクローン-TPL 2回は、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の上には、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でなければなりませんが、そうではありません!

どうしたのですか? 2番目のクローンを作成した場合、なぜIE7がクローニング元のIDを変更するのですか?

ところで、jQuery v1.4.2に戻すと、IE7は正常にクローニングを開始します。

jQuery v1.6.4のバグですか?それに対する回避策はありますか?

P. 1.6.2には他のjQueryのバグを克服するのに役立つ便利な機能がいくつかあるので、実際に1.4.2に戻すことは避けたいと思います。http://bugs.jquery.com/ticket/5684?version=10

+4

それはバグhttp://stackoverflow.com/questions/7243384/jquery-clone-html-in-ie-bug – Mansuro

+1

@Mansuroだように思える - おかげで、あなたは正しいです。 jQueryのバグトラッカーサイトで見つけたばかりですが、すぐに修正できることを願っています。私はJavascriptのネイティブsetAttributeを使用しますが、うまく動作します。 – JustAMartin

答えて

2

私も

が最後にするときのバグの疲れIEのために私自身の簡単なクローンを書かなければならなかった、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); 
} 
関連する問題