He estado corriendo la cabeza contra una pared tratando de resolver esto. Tome el siguiente cuerpo HTML:¿Por qué jQuery no puede ocultar cierto HTML?
<body>
<div id="project">
<h1>Hi</h1>
<h2>Hello</h2>
</div>
</body>
Y el siguiente código de jQuery:
$(function(){
var h = $('#project').html();
$('#project').remove();
$(h).hide().appendTo('body');
alert("Created HTML, hide, and appended!");
});
La parte $(h).hide()
causa jQuery para lanzar una excepción en Safari 4 y Firefox 3.5.
Safari:TypeError: Result of expression 'this[a].style' [undefined] is not an object.
Firefox:uncaught exception: [Exception... "Could not convert JavaScript argument arg 0" nsresult: ...]
Cuando cambio el código HTML para contener sólo una de las dos partidas (si se quita el <h1>
o <h2>
del HTML, la secuencia de comandos se ejecuta correctamente. ¿por qué es esto?
para probar por ti mismo, ver http://jsbin.com/avisi/edit
Editar: En realidad, no estoy tratando de eliminar y elemento del DOM y volver a insertarlo copiando el HTML. Este es solo un caso de prueba para un error que estoy teniendo en un código más complejo, y estoy tratando de entender por qué ocurre este error. Estoy de acuerdo en que, si quisiera lograr lo que se muestra aquí, usaría algo como $('#project').remove().children().appendTo('body')
Acepto que esta es una forma mucho más limpia de eliminar y volver a insertar los nodos en cuestión. Lo que intento entender es por qué (al menos en mi copia de Firefox 3.5 y Safari 4), este código anterior causa un error. – Ryan
Encontré la causa y actualicé mi respuesta. –
Justin, gracias por investigar esto. Estoy seguro de que puedo usar esto para resolver mi problema inicial, que fue tratar de ocultar e insertar un fragmento de HTML recibido del servidor (razón por la cual '.remove()' ... '.append()' no es una opción - no hay nada que eliminar). – Ryan