Thorsten Steffen: DOM - childNodes - browserspezifisches Verhalten

Beitrag lesen

Hi,

Gilt diese Regel denn nicht auch für alle Knoten, die mit getElementById() ermittelt werden, d.h. die sich in der Hierarchie unterhalb von dem Element "element" befinden ....

Ich meinte das Element selbst greifen kannst du jederzeit mit getElementById(), unabhängig wie die Elemente verschachtelt sind.
Wenn du natürlich mit getElementById() einsteigst und danach über die  childNodes weiter navigierst, hast du das Problem natürlich wieder.

Klar, eine brauchbare Lösung kann nicht immer sein, alle elemente mit einer id vergeben.

Z.B. die <li>-Elemente unterhalb einer <ul>-Elementes mit der id='element' ?

<ul id="element">
<li>Eintrag 1
<li>Eintrag 2
<li>Eintrag 3
</ul>

hab' ich gerade mal getestet, Firebird liefert mir hier 4. Wenn ich die Endtags (</li>) setze 7. FireFox habe ich hier leider nicht drauf.

Hier ist doch nach jedem Listenpunkt ein Umbruch (oder?)
Mein Firefox gibt trotz Umbrüchen die korrekte Anzahl (3) von childnodes an ...

Scheint er wegen der fehlenden Endtags nicht so aufzufassen. Probier einfach mal das mit den entsp. Endtags.

SelfHTML wird zu 25% etwa von Mozilla-Browsern benutz.
Ich finde alleine den Gedankengang, Browser aus bequemlichkeit auszuschliessen nicht besonders sinnvoll.

http://aktuell.de.selfhtml.org/sonst/userwatch.shtml

War mir nicht bekannt und geht ja aus dem Absatz in Selfhtml nicht hervor; ist auch nicht unbedingt Bequemlichkeit, sondern eine Frage der Ökonomie.

Ansichtssache ;)
Für mich Bequemlichkeit, da 1.) AFAIK es nicht definiert ist ob dieser Zeilenumbruch nun im Sinne von DOM ein childNode darstellen so oder nicht, 2.) du 1. ausser Acht lässt und die "einfachere" Variation als Lösungsgrundlage verwendest und dafür auch Browser bewusst ausschliesst, ohne vielleicht tatsächliches zu wissen wieviele du nun damit bewusst ausschliesst.

DOM bietet genügned Möglichkeiten, es liegt nur daran wie effektiv man diese einsetzt. D.h. nicht, dass eine Navigation mit childNodes immer am sinnvollsten ist.
Willst du z.b. das allererste Element ansprechen, egal welches ist firstChild eine gute Wahl.
Willst du gezielt ein Element, unabhängig wo es sich befindet ansprechen, ist firstChild wiederrum vielleicht die falsche Wahl, weil sich die Position vielleicht ändern mag, da wäre getElementById() dein Freund :)

<ul id="element">
<li>Eintrag 1
<li>Eintrag 2
<li>Eintrag 3
</ul>

mit
document.getElementById("element").getElementsByTagName("LI")
z.b., liefert dir DOM hervorragend nur die einzelnen Listenelemente, völlig egal ob nun Zeilenumbrüche oder nicht.

gruss
Thorsten