Ich bin Javascript-Anfänger.
Ich starte eine Webseite über die window.onload, ich muss eine Reihe von Elementen anhand ihres Klassennamens ( slide) finden und sie basierend auf einer bestimmten Logik auf verschiedene Knoten verteilen. Ich habe eine Funktion, Distribute(element)die ein Element als Eingabe nimmt und die Verteilung übernimmt. Ich möchte so etwas tun (wie zum Beispiel hier oder hier beschrieben ):
var slides = getElementsByClassName("slide");
for(var i = 0; i < slides.length; i++)
{
Distribute(slides[i]);
}
Dies macht jedoch nicht die Magie für mich, weil getElementsByClassNamenicht tatsächlich Array zurückgibt, sondern ein NodeList, was ...
... das ist meine Spekulation ...
... innerhalb der Funktion geändert werden Distribute(der DOM-Baum wird innerhalb dieser Funktion geändert und das Klonen bestimmter Knoten erfolgt). For-eachSchleifenstruktur hilft auch nicht.
Die variablen Folien wirken wirklich undeterministisch, da sie bei jeder Iteration die Länge und Reihenfolge der Elemente stark ändern.
Was ist in meinem Fall der richtige Weg, um NodeList zu durchlaufen? Ich habe darüber nachgedacht, ein temporäres Array zu füllen, bin mir aber nicht sicher, wie ich das machen soll ...
BEARBEITEN:
Eine wichtige Tatsache, die ich vergessen habe zu erwähnen, ist, dass sich möglicherweise eine Folie in einer anderen befindet. Dies ändert tatsächlich die slidesVariable, wie ich gerade dank Benutzer Alohci herausgefunden habe .
Die Lösung für mich bestand darin, jedes Element zuerst in ein Array zu klonen und das Array anschließend einzeln zu übergeben Distribute().
Distribute()Funktion ist zu lang und komplex, um hier kopiert zu werden, aber ich bin sicher, dass ich die DOM-Struktur im Inneren ändere und dort auch Elemente dupliziere (klone). Wenn ich es debugge, kann ich sehen, dass sich die Variablen slidesjedes Mal ändern, wenn sie übergeben werden.
getElementsByClassName()ein Live zurückgibt. Wenn nodeListalso Elemente mit dieser Klasse hinzugefügt werden, nodeListändert sich die Länge der Änderungen, über die Sie iterieren.

