2011-09-24 17 views
5

Sto usando jQuery v1.6.4. Qui è il banco di prova per il mio problema:jQuery 1.6.4 problemi di clonazione in 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> 

In Mozilla Firefox e Internet Explorer 9 funziona come previsto: cloni clone-tpl due volte, cambia id e aggiunge i cloni al div contenitore. Il contenitore div rimane intatto. Il registro di uscita di allarme è la seguente:

<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 

Ma su Internet Explorer 7 si scombina le cose con il clone2, guardate cosa avviso dice:

<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 

ho idea, come alert($('#clone-tpl').attr('id')) potrebbe improvvisamente dare qualcosa di diverso da clone-tpl? Dopo tutto, se seleziono l'elemento per l'attributo id clone-tpl, l'attributo id DEVE essere clone-tpl, ma non lo è!

Cosa c'è che non va? Perché IE7 cambia id della sorgente di clonazione se creo un secondo clone?

A proposito, se torno a jQuery v1.4.2, IE7 inizia a clonare normalmente.

Si tratta di un bug in jQuery v1.6.4? C'è qualche soluzione per questo?

P.S. Vorrei davvero evitare di tornare alla versione 1.4.2 perché 1.6 ha alcune funzioni utili che mi aiutano a superare qualche altro bug di jQuery: http://bugs.jquery.com/ticket/5684?version=10.

+4

sembra come se fosse un insetto http://stackoverflow.com/questions/7243384/jquery-clone-html-in-ie-bug – Mansuro

+1

@Mansuro - grazie, hai ragione. L'ho appena trovato nel sito jQuery bug tracker, speriamo che lo risolvano presto. Nel frattempo userò Javascript setAttribute nativo, funziona perfettamente. – JustAMartin

risposta

2

ho avuto problemi di cloni con IE, anche

infine, ha dovuto scrivere il mio semplice clone di IE per quando si è stanchi di bug. Non è universale né geniale, ma in questo caso non si può fare molto, IE fa schifo.

Può essere modificato in base alle proprie esigenze.

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); 
} 
Problemi correlati