Sebi: childNodes - Knoten im Knoten

<html>
<head>
<script type="text/javascript">
<!--
function test()
{
eltern = document.body;
kind = eltern.childNodes.item(0).id;
alert(kind);
}
//-->
</script>
</head>
<body onLoad="test()">
<div id="eins">Eins</div>
<div id="zwei">Zwei</div>
</body>
</html>

Hallo ...

ich möchte mit einem Script jeweils die <DIV>-Container ansprechen und in diesem Beispiel die ID des erten <DIV> mit alert() ausgeben.

NUR:

Bei dieser Beispielfunktion reagieren die Browser IE und Firefox unterschiedlich - und ich weiss nicht, warum!

IE liefert für "kind" die Id "eins", Firefox liefert "undefined" - Firefox liefert aber bei item(1) das Ergebnis "eins".

Nach meinem Verständnis müsste "eltern.childNodes" alle Tags enthalten, die im Body notiert sind. Diese müsste ich doch dann mit item() und der entsprechenden Indexzahl ansprechen können ....

Demnach wäre item(0) der erste Tag - also der <DIV> mit der ID "eins"

ODER?

Bin für eine Antwort sehr sehr dankbar

mfg Fabian

  1. Halihallo Sebi

    ich möchte mit einem Script jeweils die <DIV>-Container ansprechen und in diesem Beispiel die ID des erten <DIV> mit alert() ausgeben.

    alert(document.getElementById('eins').id); // :-)

    Nach meinem Verständnis müsste "eltern.childNodes" alle Tags enthalten, die im Body notiert sind. Diese müsste ich doch dann mit item() und der entsprechenden Indexzahl ansprechen können ....

    Nein, nicht die Tags, auch nicht die Elemente, aber die
    Nodes. "Dummerweise" ist Text auch eine Node -> eine Textnode und
    zwischen <body> und <div> ist Text, nämlich eine Newline. Anscheinend
    werden diese in den Browsern different gehandhabt.

    Demnach wäre item(0) der erste Tag - also der <DIV> mit der ID "eins"

    Nö. item(0) ist ein Textnode mit einer Newsline als Inhalt. item(1)
    dürfte in deinem Beispiel die <div> sein (bei firefox).

    Bin für eine Antwort sehr sehr dankbar

    Um derartiges auszuschliessen kannst du die Elemente entweder direkt
    über ihre id ansprechen (getElementById()), oder du musst auf eine
    korrektere, allgemeingültigere Definition gehen. Fixe Indizies sind
    hierbei eine etwas heikel (besonders, wenn Browser sie falsch
    umsetzen).

    Über http://selfhtml.teamone.de/javascript/objekte/node.htm#node_type
    hättest du gesehen, dass es sich um eine TextNode handelt und nicht
    um eine ElementNode. Lass dir dies mal über alert() ausgeben.

    Viele Grüsse

    Philipp

    --
    The only program that runs perfectly every time, is a virus.