2011-09-24 33 views
5

Tôi đang sử dụng jQuery v1.6.4. Đây là trường hợp thử nghiệm cho vấn đề của tôi:Vấn đề nhân bản jQuery 1.6.4 trong 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> 

Trong Mozilla Firefox và Internet Explorer 9 nó hoạt động như mong đợi: nhái clone-tpl hai lần, thay đổi id và gắn thêm các dòng vô tính để div container. Div container vẫn nguyên vẹn. Nhật ký đầu ra cảnh báo như sau:

<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 

Nhưng trên trình duyệt Internet Explorer 7 nó messes mọi thứ lên với clone2, hãy nhìn những gì báo nói:

<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 

Tôi không có ý tưởng, làm thế nào alert($('#clone-tpl').attr('id')) có thể đột ngột cho cái gì khác hơn là clone-tpl? Sau khi tất cả, nếu tôi chọn phần tử bởi thuộc tính id clone-tpl, thuộc tính id PHẢI là bản sao-tpl, nhưng nó không phải là!

Điều gì là sai? Tại sao IE7 thay đổi id của nguồn nhân bản nếu tôi tạo một bản sao thứ hai?

Nhân tiện, nếu tôi hoàn nguyên về jQuery v1.4.2, IE7 bắt đầu nhân bản bình thường.

Đây có phải là lỗi trong jQuery v1.6.4 không? Có cách giải quyết nào không?

P.S. Tôi thực sự muốn tránh hoàn nguyên về 1.4.2 vì 1.6 có một số tính năng hữu ích giúp tôi khắc phục một số lỗi jQuery khác: http://bugs.jquery.com/ticket/5684?version=10.

+4

có vẻ như đó là một lỗi http://stackoverflow.com/questions/7243384/jquery-clone-html-in-ie-bug – Mansuro

+1

@Mansuro - cảm ơn, bạn là đúng. Tôi chỉ tìm thấy nó trong trang web theo dõi lỗi jQuery, chúng ta hãy hy vọng họ sẽ sửa chữa nó sớm. Trong khi đó tôi sẽ sử dụng Javascript native setAttribute, nó hoạt động tốt. – JustAMartin

Trả lời

2

Tôi có vấn đề clone với IE, quá

Cuối cùng đã phải viết bản sao đơn giản của riêng mình cho trình duyệt IE khi mệt mỏi của các lỗi. Nó không phải là phổ quát không rực rỡ nhưng trong trường hợp này nó không thể được thực hiện nhiều, IE sucks.

Nó có thể được sửa đổi theo nhu cầu của một người.

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); 
} 
Các vấn đề liên quan