forum Sea of Sin / Startseite sitemap

Sea of Sin / Blog

Zentrum der Langeweile

getElementByTagName und die live NodeList

2008/10/30 von de_henne
Gerade habe ich eine etwas merkwürdige Entdeckung in Sachen JavaScript gemacht.Dieses kleine Stückchen Code hat mich schon zweifeln lassen:document.getElementById('irgendwo').getElementsByTagName('a');

getElementsByTagName liefert eine Liste von Einträgen, des übergebenen Tagnamen, zurück. Diese Liste wollte ich durchgehen und bestimmte Elemente ersetzen. Problem war, nur jedes 2te Element wurde ersetzt.


In der Mozilla Doku fand ich dann den Ursprung des Problems:

https://developer.mozilla.org/En/DOM:element.getElementsByTagName


elements = element.getElementsByTagName(tagName)
elements is a live NodeList of found elements in the order they appear in the tree.


Ergo, die Liste ist dynamisch. Also meine Liste wurde kleiner während ich die Elemente löschte ... muss man erster einmal wissen.


Lösung des Problems:


Die Elemente in ein temporäres Array rein haun und dann dieses durchgehen :-)

  1. var links = document.getElementById('irgendwo').getElementsByTagName('a');
  2. var list = [];
  3.  
  4. // Statische Liste
  5. for (i=0; i < links.length; i++) {
  6. list.push(links[i]);
  7. };

list beinhaltet nun alle A Elemente.



Ansonsten
Aber wieso gibt es nur eine Schraubenmutter und keinen Schraubenvater

  • Keine Kommentare