J'ai couru la tête dans un mur en essayant de comprendre cela. Prenez le corps HTML suivant:Pourquoi jQuery ne parvient pas à masquer certains fichiers HTML?
<body>
<div id="project">
<h1>Hi</h1>
<h2>Hello</h2>
</div>
</body>
Et le code jQuery suivant:
$(function(){
var h = $('#project').html();
$('#project').remove();
$(h).hide().appendTo('body');
alert("Created HTML, hide, and appended!");
});
La partie $(h).hide()
fait jQuery pour lancer une exception dans Safari 4 et 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: ...]
Quand je change le code HTML pour contenir seulement l'une des deux rubriques (si vous supprimez le script fonctionne avec succès <h1>
ou <h2>
du HTML,. Pourquoi est-ce
? pour essayer pour vous-même, voir http://jsbin.com/avisi/edit
Edit: Je ne suis pas en train d'essayer de supprimer et de supprimer un élément du DOM et de le réinsérer en copiant le code HTML. Ceci est juste un test pour une erreur que j'ai dans un code plus complexe, et j'essaie de comprendre pourquoi cette erreur se produit. Je suis d'accord que, si je voulais accomplir juste ce qui est montré ici, je voudrais utiliser quelque chose comme $('#project').remove().children().appendTo('body')
Je suis d'accord que c'est une façon beaucoup plus propre de supprimer et de réinsérer les nœuds en question. Ce que j'essaie de comprendre, c'est pourquoi (au moins dans ma copie de Firefox 3.5 et Safari 4), ce code ci-dessus provoque une erreur. – Ryan
J'ai trouvé la cause et j'ai mis à jour ma réponse. –
Justin, merci d'avoir enquêté là-dessus. Je suis sûr que je peux l'utiliser pour résoudre mon problème initial, qui essayait de cacher et d'insérer un fragment HTML reçu du serveur (c'est pourquoi '.remove()' ... '.append()' n'est pas une option - il n'y a rien à enlever). – Ryan