Felix Riesterer: Objekt aus getElementsByTagName() erweitern?

Beitrag lesen

Liebe Selfer,

ich habe mir mit document.getElementsByTagName("ul") alle <ul>s ermitteln lassen. Diese Funktion gibt mir nicht etwa - wie ich so blauäugig erwartet hätte - ein Array mit den Referenzen zu den HTML-Elementen zurück, sondern ein "object". Aber dieses Objekt kann ich (wie eben ein Array) mit einem Index abfragen und so auf die Elemente zugreifen:

var alle_uls = document.getElementsByTagName("ul");  
for (var index = 0; index < alle_uls.length; index++) { alle_uls[index].tue_was(); }

Nun habe ich ein weiteres Objekt, das ich in einer Schleife gerne ebenso behandeln möchte, wie alle diese alle_uls[index]. Dazu habe ich mit alle_uls[alle_uls.length] = mein_objekt das aus der oben genannten Funktion gewonnene Objekt um genau diesen Knoten erweitert.

Warum geht denn nun die Eigenschaft length nicht um einen Zähler hoch? Ich kann in der Schleife (siehe oben) zwar alle <ul>-Elemente abfragen, aber wenn ich auf "index < alle_uls.length" prüfen lasse, dann bricht die Schleife um genau das neu angehängte Objekt zu früh ab. Eine Prüfung auf "index <= alle_uls.length" behebt das Problem zwar einigermaßen, aber bei mir bleibt die Frage, warum denn da die length nicht um eins erhöht wurde, bzw. was ich hätte tun können, damit dem so ist.

Kurze Versuche mit alle_uls.appendChild(mein_objekt) und alle_uls.insertBefore(mein_objekt, alle_uls[alle_uls.length]) sind gescheitert, da ich sie wohl im falschen Kontext verwendet habe.

Durch meine Objektmanipulationen wird die von Javascript erzeugte Aussage über die Anzahl im Dokument vorhandener <ul>-Elemente völlig zweckentfremdet, das ist klar. Aber ein neues Objekt zu definieren, in das ich dann alles "hinüberkopiere" empfinde ich als nicht besonders praktisch... Und außerdem habe ich ja eine Variablen "alle_uls" mit einer Kopie des von der Funktion getElementsByTagName zurückgegebenen Wertes gefüttert. Damit wäre mein Vorgehen ja nicht verwerflich...

Wer kann mich über die tiefen Geheimnisse aufklären?

Liebe Grüße aus Ellwangen,

Felix Riesterer.