(DOM) Wer hat recht?
Jürgen Berkemeier
- dhtml
Hallo,
ich habe angefangen, mich ein wenig in das DOM einzuarbeiten. Dabei habe ich mit Schrecken festgestellt, das Opera DOM fast garnicht unterstützt, NS6 und Mozilla Leerzeichen und Zeilenumbrüche als Knoten ansehen, IE aber nicht. Nur wenn ich z. B. eine Tabelle als Einzeiler ohne Lehrzeichen zwischen den Tags, also <tr><td> und nicht <tr> <td> schreibe, erhalte ich beim IE und beim Mozilla das gleiche Ergebnis. Siehe auch selfhtml, http://selfhtml.teamone.de/javascript/objekte/node.htm#child_nodes_nn6x . Nun meine (einfache) Frage: Wer hat Recht? Ist laut Definition ein Leerzeichen zwischen den Tags ein Knoten? Ist ein zwischen den Tags überhaupt erlaubt?
Gruß, Jürgen
Sup!
Ich habe jetzt in der Schnelle nichts eindeutiges gefunden, ABER:
Es gibt einen Unterschied zwischen <tag> <tag> und <tag><tag>, auch wenn in HTML mehrere Whitespaces zu einem einzelnen Whitespace "eingedampft" werden.
Wenn das DOM diesen Unterschied korrekt beschreiben soll, dann muss das Leerzeichen zwischen den Tags als TextNode eingehaengt werden. Auch mehrere Leerzeichen muessen als mehrere Leerzeichen gespeichert werden, sonst wuerde beim Laden ins Dom und nach anschliessendem Speichern Information verlorengehen.
Ob der User Agent diese Leerzeichen rendert oder nicht, sollte fuer die Dokumentstruktur keine Rolle spielen.
Bei XML ist es ja teilweise wahlfrei, ob man einen Wert als Attribut oder als Elementinhalt speichert - der IE koennte, haette er Recht, willkuerlich <meintag magic=" "><meintag> zu <meintag><magic></magic></meintag> umformen, und die Information waere weg... und ueberhaupt sehe ich keinen Grund, warum, unter allen Unicode Zeichen, gerade die White-Spaces einfach so weggeschmissen werden duerfen sollten.
Und natuerlich bin ich fest davon ueberzeugt und voller Hoffnung, dass Mozilla recht hat und der IE nicht.
Gruesse,
Bio
Hi Bio,
und ueberhaupt sehe ich keinen Grund, warum, unter
allen Unicode Zeichen, gerade die White-Spaces
einfach so weggeschmissen werden duerfen sollten.
ich schon.
Nämlich weil eine Zeilenschaltung auch ein whitespace ist.
Ich habe in einem meiner Dokumente folgende Struktur:
<td id="Italy-Moves">
<p>A Rom-Ven</p>
<p>A Tri S "</p>
<p class="failed">F Tun S F<br />WMS xxx</p>
<p class="failed">F TYS S F<br />Tun xxx<br /><span class="retreat">>Sar</span></p>
</td>
Das ist für mich sehr schön lesbar - ich muß alle vier Wochen solche Dateien manuell erstellen, und der Inhalt ist ganz schön kniffelig (und ein Tippfehler wäre eine Katastrophe).
M$IE und Opera stellen das so dar, wie ich will: Lauter Zeilen innerhalb einer Tabellenzelle.
Einzig Mozilla (ich habe 0.9.9 aktiv) macht aus dem Zeilenumbruch vor dem ersten <p> eine zusätzliche Leerzeile in meiner schönen Tabelle - und zwingt mich deshalb dazu, diesen Zeilenumbruch zu vermeiden, indem ich
<td id="Italy-Moves"><p>A Rom-Ven</p>
<p>A Tri S "</p>
<p class="failed">F Tun S F<br />WMS xxx</p>
<p class="failed">F TYS S F<br />Tun xxx<br /><span class="retreat">>Sar</span></p>
</td>
notieren muß.
Wohlgemerkt - _nur_ der _erste_ dieser Zeilenumbrüche hat diese Wirkung - alle anderen nicht! Dort ist Mozilla plötzlich egal, daß die Zeilenumbrüche auch whitespaces sind ...
Wieso, bitte, ist das logisch?
Viele Grüße
Michael
Hallo Bio, hallo Michael,
und ueberhaupt sehe ich keinen Grund, warum, unter
allen Unicode Zeichen, gerade die White-Spaces
einfach so weggeschmissen werden duerfen sollten.
ich schon.
Nämlich weil eine Zeilenschaltung auch ein whitespace ist.
ich halte es auch für kritisch, wenn folgende Struktur:
<table id="xxx">
<tr>
<td
</td>
</tr>
</table>
etwas anderes bedeutet als:
<table id="xxx"><tr><td</td></tr></table> .
Denn ich halte es für sehr wichtig, dass mann HTML genauso übersichtlich "programmiert" wie z.B. C oder Fortran. Wenn Browser Umbrüche oder Einrückungen plötzlich zu Knoten machen, und das auch noch jeder wie er es will, sehe ich für das Erstellen von HTML-Seiten von Hand schwarz. Nicht vergessen darf mann auch, dass ...</td> <td>... erlaubt ist, ...</td> <td>... aber nicht. Womit ich wieder bei meinem Problem bin, dass ich bei document.getElementById("xxx").firstChild.nodeName im IE und im Mozilla unterschiedliche Resultate erziele.
Viele Grüße,
Jürgen
Sup!
Ich habe das mal als Bug an Mozilla gepostet - mal gucken, was rauskommt - wer Recht hat - ob Mozilla 1.0 alles richtig machen wird - stay tuned.
http://bugzilla.mozilla.org/show_bug.cgi?id=131169
Gruesse,
Bio