Verweis auf angehängten Knoten Javascript beibehalten

8

Bitte keine Bibliotheken. Jenseits meiner Kontrolle.

Ich hänge ein Dokumentfragment an das Dom an. Das alles funktioniert. Kein Problem.

Wie behalte ich die Knotenliste, nachdem das Fragment angehängt wurde? Relevanter Code:

%Vor%

Auch das funktioniert! Ich brauche keine Problembehandlung, wie man Dinge zum dom hinzufügt!

Wenn ich var e = element.appendChild(frag); einstelle, wird alles normal angehängt, aber e = ein leeres Dokumentfragment.

Ich suche hier einen sanften magischen Voodoo. Schicke mich nicht über das ganze Dom. Der Inhalt kann alles, ein oder mehrere Knoten mit oder ohne Kinder sein. Wenn es einen Trick mit querySelectorAll oder etwas gibt, das akzeptabel wäre.

Danke!

BEARBEITEN Beim weiteren Stochern scheint e in der Tat ein zurückgegebener Verweis auf frag var zu sein, der leer ist, nachdem er an dom angehängt wurde. Es ist fast so, als wären die Elemente sauber vom Fragment in das Dom gerutscht, und das Fragment liegt einfach leer herum.

    
Randy Hall 09.11.2012, 20:25
quelle

3 Antworten

14

Es ist genau das, was Sie beschrieben haben; Wenn die Elemente an ein Element angehängt werden, werden sie aus dem Fragment entfernt, um zu verhindern, dass Speicherlecks durch Verweise verloren gehen.

Eine Möglichkeit, diese untergeordneten Knoten zu erhalten, besteht darin, eine flache Kopie des childNodes des Fragments zu erstellen, bevor appendChild() :

ausgeführt wird %Vor%     
Ja͢ck 12.11.2012, 16:17
quelle
2

Aus dem Dokument DocumentFragment :

  

Verschiedene andere Methoden können ein Dokumentfragment als Argument verwenden (z. B. beliebige Knotenschnittstellenmethoden wie appendChild und insertBefore). In diesem Fall werden die untergeordneten Elemente des Fragments angehängt oder eingefügt, nicht das Fragment selbst.

So appendChild method gibt das documentFragment zurück, aber es ist leer, weil seine untergeordneten Knoten in Ihr element -Objekt eingefügt werden und (von appendChild doc):

  

[...] Ein Knoten darf nicht gleichzeitig an zwei Punkten des Dokuments liegen. Wenn der Knoten also bereits einen Elternknoten hat, wird dieser zuerst entfernt und dann an der neuen Position angehängt.

Jetzt ... Sie können Ihre Kinder in einem Cache-Array speichern und danach zurückgeben (oder Jack-Lösung sehen: -))

    
Luca Rainone 12.11.2012 16:24
quelle
1

Wenn Sie nach dem Anhängen suchen, ist lastChild der richtige Weg. Benutze es so:

%Vor%

Weitere Informationen in SitePoint

    
Serabe 12.11.2012 16:16
quelle