2011-09-24 19 views
5

Estoy usando jQuery v1.6.4. Aquí es el caso de prueba para mi problema:jQuery 1.6.4 problemas de clonación en 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> 

En Mozilla Firefox e Internet Explorer 9 funciona como se esperaba: los clones de clones-TPL dos veces, cambia el ID y anexa los clones para el div contenedor. El contenedor div permanece intacto. El registro de salida de alerta es el siguiente:

<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 

Pero en Internet Explorer 7 se mete cosas con el clone2, mira lo que alerta 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 

no tengo ni idea, ¿cómo alert($('#clone-tpl').attr('id')) repente pude dar algo más que clone-tpl? Después de todo, si selecciono el elemento por el atributo id clone-tpl, el atributo id DEBE ser clone-tpl, ¡pero no lo es!

¿Qué pasa? ¿Por qué IE7 cambia la identificación de la fuente de clonación si creo un segundo clon?

Por cierto, si vuelvo a jQuery v1.4.2, IE7 comienza a clonar normalmente.

¿Es un error en jQuery v1.6.4? ¿Hay alguna solución para esto?

P.S. Realmente me gustaría evitar volver a 1.4.2 porque 1.6 tiene algunas características útiles que me ayudan a superar algunos otros errores de jQuery: http://bugs.jquery.com/ticket/5684?version=10.

+4

parece que es un error http://stackoverflow.com/questions/7243384/jquery-clone-html-in-ie-bug – Mansuro

+1

@Mansuro - gracias, usted tiene razón. Lo encontré en el sitio de seguimiento de errores de jQuery, esperemos que lo arreglen pronto. Mientras tanto, usaré Javascript native setAttribute, funciona bien. – JustAMartin

Respuesta

2

tuve problemas clon con IE, también

finalmente tuvo que escribir mi propio clon simple para esto es, cuando cansado de errores. No es universal ni brillante, pero en este caso no se puede hacer mucho, IE apesta.

Se puede modificar según las necesidades.

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); 
} 
Cuestiones relacionadas