molily: Event-Handling, Ein-/Ausschalten von Listen...

Beitrag lesen

Hallo,

dann lass es mal durchlaufen und sehe selbst, was passiert wenn du statt ...[0]... ...[i]... einsetzt. Die Schleife bricht ab, nachdem i = 1 ist. Das Array ist ein "LiveNode-Objekt" und verändert seine Anzahl nach jedem Durchgang. Dies müsste man also Rekursiv durchlaufen, damit habe ich mich aber noch nicht beschäftigt.

Hat jetzt mit deiner Ausgangsfrage weniger zu tun, aber ein paar generelle Anmerkungen:

Rekursion ist etwas anderes. Von Rekursion spricht man, wenn Funktionen sich selbst erneut aufrufen. Oder wenn eine verschachtelte, mehrdimensionale Datenstruktur (z.B. ein Baum) durchlaufen wird und dabei in der Verschachtelung »abgestiegen« wird. Eine NodeList ist nicht verschachtelt.

Du meinst eher, dass man die Liste von hinten durchläuft, oder solange keine Einträge mehr da sind. Beispiel:

var elements = document.getElementsByClassName('foo');  
var element;  
while (element = elements[0]) {  
  element.className = '';  
}

Das ist im Grunde das, was du schon machst, nur kompakter mit einer while-Schleife geschrieben.

Oder von hinten durchlaufen:

var elements = document.getElementsByClassName('foo');  
var i = elements.length;  
while (i--) {  
  var element = elements[i];  
  element.className = '';  
}

Das Operieren auf einer Live-NodeList versucht man i.d.R. zu vermeiden, weil es sehr Performance-intensiv ist. Bei jeder Änderung eines Elements muss der Browser intern die Abfrage document.getElementsByClassName('foo') wiederholen, um die NodeList zu aktualisieren.

Man kann die Live-NodeList in einen normalen Array umwandeln:

var elements = Array.prototype.slice.call( document.getElementsByClassName('foo') );

Dann ändert sich der Inhalt des Arrays nicht, wenn man Elemente davon ändert. Der Browser muss also nicht mit jeder Änderung die NodeList neu berechnen.

Mathias