Javascript: for each problem?

Hallo Wissende, mich beschäftigt folgendes:
Ich habe eine Tabelle, deren Kinderknoten (tr) gehe ich durch, und lasse mir den inhalt deren Kinderknoten (td) ausgeben. Das mache ich wie folgt:

t = document.getElementById('kzTabelle');
alert(t.childNodes.length);

for each (var node in t.childNodes)
 alert(node.childNodes[2].firstChild.nodeValue);

Die Ausgabe funktioniert auch, aber ich bekomme trotzdem einen fehler gemeldet (Firefox:firebug):

**node.childNodes has no properties**

Wie kann das sein wenn er mir doch den Inhalt bereits mit allert ausgegeben hat?

der aufbau der tabelle ist wie folgt:

x
x
y
x
x
y

Danke für eure Zeit.
Indyk

rows/cells
Hallo Indyk!

Das Problem ist, dass das Tabellen- bzw. Zeilen-Objekt nicht nur die Zeilen bzw. Zellen, sondern auch etwa den Zeilenumbruch zwischen zwei Tags als eigenes Element enthält, dass dann in der for-each-Schleife auftaucht. Deswegen ist es wohl besser, mit dem rows- bzw. cells-Array und einer for-Schleife mit Zähler zu arbeiten. Also z. B.

document.getElementById('kzTabelle').rows[0].cells[0]

für die erste Zelle der ersten Spalte. Alternativ könnte man, wenn es for each sein muss, für jedes Element prüfen, ob es überhaupt eine Tabellenzelle ist.

Hier ein Beispiel mit Zählschleife für die Zeilen, und for each für die Zellen:

t = document.getElementById('kzTabelle');
// alle Zeilen
for(zeileNr=0; zeileNr
ich verwende _innerHTML_ statt _nodeValue_, da letzteres, glaube ich, im Firefox nicht den Inhalt liefert.

Hallo Wissende, mich beschäftigt folgendes:
Ich habe eine Tabelle, deren Kinderknoten (tr) gehe ich durch,
und lasse mir den inhalt deren Kinderknoten (td) ausgeben. Das
mache ich wie folgt:

der aufbau der tabelle ist wie folgt:

x
x
y

x
x
y

Nein, der Aufbau deiner Tabelle ist in Wahrheit wie folgt:
x
x
y
x
x
y

Lass dir mal t.childNodes.length ausgeben, dann wirst du sehen, dass der IE ‚1‘ meldet, vernünftige Browser hingegen ‚3‘, egal, wie viele TR-Elemente deine Tabelle als Enkelkind-Elemente enthält:

Selbst, wenn du kein explizites TBODY-Element in deinen Tabellen-Code schreibst, so ist dieses implizit immer als direktes Kindelement vorhanden.

t.childNodes ist bei nur einem TBODY-Element deiner Tabelle*, ein Array mit genau einem bzw. (inklusive Zeilenumbrüchen im Quellcode) drei Membern, deren NodeName „#text“ bzw. „TBODY“ lautet (Den kannst du dir spaßeshalber ja auch mal ausgeben lassen).

Schnelleren Zugriff auf die Zeilen der Tabelle hast du über deren Element-Objekt-Eigenschaft „rows&rdqo;, die übrigens nicht nur TABLE-, sondern auch TBODY-Elementobjekte haben.

http://de.selfhtml.org/javascript/objekte/htmlelemen…
http://de.selfhtml.org/javascript/objekte/htmlelemen…

Gruß Gernot

* Explizit könntest du in deiner Tabelle ja auch mehrere TBODY-Bereiche markieren, tust du es aber nicht, so ist trotzdem immer mindestens einer pro Tabelle implizit vorhanden.