Ich habe meinen Kopf in eine Wand gerannt und versucht, das herauszufinden. Nehmen Sie den folgenden HTML-Körper:Warum kann jQuery bestimmte HTML nicht verbergen?
<body>
<div id="project">
<h1>Hi</h1>
<h2>Hello</h2>
</div>
</body>
Und die folgende jQuery-Code:
$(function(){
var h = $('#project').html();
$('#project').remove();
$(h).hide().appendTo('body');
alert("Created HTML, hide, and appended!");
});
Der $(h).hide()
Teil verursacht jQuery eine Ausnahme in Safari 4 und Firefox 3.5 zu werfen.
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: ...]
Wenn ich das HTML ändern, nur eine der beiden Positionen enthalten (wenn Sie die <h1>
oder <h2>
aus dem HTML entfernen, wird das Skript erfolgreich. Warum ist das?
für sich selbst versuchen, sehen http://jsbin.com/avisi/edit
Edit: Ich versuche nicht wirklich, Elemente aus dem DOM zu entfernen und wieder einzufügen, indem ich das HTML kopiere. Dies ist nur ein Testfall für einen Fehler, den ich in komplexeren Code habe, und ich versuche zu verstehen, warum dieser Fehler auftritt. Ich stimme dem zu, wenn ich nur das erreichen wollte, was hier gezeigt wird, würde ich etwas wie $('#project').remove().children().appendTo('body')
Ich stimme zu, dass dies eine viel sauberere Möglichkeit ist, die fraglichen Knoten zu entfernen und wieder einzufügen. Ich versuche zu verstehen, warum (zumindest in meiner Version von Firefox 3.5 und Safari 4) dieser obige Code einen Fehler verursacht. – Ryan
Ich habe die Ursache gefunden und meine Antwort aktualisiert. –
Justin, danke für die Untersuchung. Ich bin mir sicher, dass ich damit mein erstes Problem lösen kann, das darin besteht, ein HTML-Fragment zu verstecken und einzufügen, das vom Server empfangen wurde (weshalb '.remove()' ... '.append()' nicht ist eine Option - es gibt nichts zu entfernen). – Ryan