frankx: childNodes nicht wie erwartet

Hallo,

in u.g. Beispiel hab ich jedem "Knoten" eine ID verpasst. alert (window.document.childNodes[0].id] bringt dann erwartungsgemäß "html".

window.document.childNodes[0].childNodes[0] den "head",

aber

window.document.childNodes[0].childNodes[2] (_2_!!!) den "body".

und

window.document.childNodes[0].childNodes[0].childNodes[0] "undefinded"

aber

window.document.childNodes[0].childNodes[0].childNodes[1] (_1_!!) erst "link", obwohl doch <link> das erste (also nullte Element ist???)

und "logischerweise" dann erst bei ... childNodes[3] "script".

Mag mir einer erläutern, warum da immer einer ausgelassen wird?

Besten Dank,

Frankx

<html id="html">
 <head id="head">
  <link id="linkd" href="style1.css" rel="stylesheet" type="text/css">
  </link>

<script type="text/javascript" id="script">
   function knotenTest()
   {
    y = window.document.childNodes[0].childNodes[2].childNodes[3]; // ingesamt 7 im head ??? childNodes[6];
    yy = y.id;
    alert (yy);
   }
  </script>

<title id="title">
  </title>

<meta id="meta" http-equiv="Content-type" content="text/html; charset=utf-8">

</head>

<body id="body">
  <input id="input1" type="button" onclick="cssAendern()" value="css-src-ändern">
  <input id="input2" type="button" onclick="knotenTest()" value="alert-link-href">
 </body>

</html>

  1. Hallo,

    mal schnell geraten: laß Dir doch mal den Knotentyp ausgeben. Ich tippe darauf, daß die vermeintlichen Lücken Textknoten sind.
    Mozilla und der IE verhalten sich bei Zeilenumbrüchen im HTML-Quellcode unterschiedlich - der IE ignoriert den Whitespace einfach, für Mozilla sind es aber Textknoten und damot Elemente des DOM-Baums.

    Ciao,
    Andreas

    --
    "Das Corporate Design für das Internet sieht eine Reihe von Grafikelementen vor, die die Optik der Webseite visuell und funktionell beeinflussen." - (Zitat aus dem "Styleguide Corporate Design"  eines großen Konzerns...)
    1. Moin!

      Mozilla und der IE verhalten sich bei Zeilenumbrüchen im HTML-Quellcode unterschiedlich - der IE ignoriert den Whitespace einfach, für Mozilla sind es aber Textknoten und damot Elemente des DOM-Baums.

      Und das ist durchaus logisch und sinnvoll, denn Whitespace ist ja nicht einfach "nichts", sondern durchaus Inhalt mit Trennwirkung.

      Schließlich war es zu Zeiten des Tabellendesigns beispielsweise unheimlich wichtig, die transparenten GIFs unbedingt OHNE Whitespace in die Zellen zu setzen:

        
      <td><img src="1.gif" width="1" height="1"></td>  
      <!-- und nicht so: -->  
      <td>  
        <img src="1.gif" width="1" height="1">  
      </td>  
      
      

      Der Whitespace muß sich also irgendwie im Dokumentenbaum wiederfinden. Nur weil er meistens zu "nichts" reduziert wird, heißt ja nicht, dass er nicht existiert.

      - Sven Rautenberg

      --
      My sssignature, my preciousssss!
      1. Moin auch,

        besten Dank erstmal. Gibt es denn eine Möglichkeit, die Tags bzw. Elemente direkter anzusprechen (ohne id)?

        Danknochmalimvoraus Frankx

        1. Hi,

          besten Dank erstmal. Gibt es denn eine Möglichkeit, die Tags bzw. Elemente direkter anzusprechen (ohne id)?

          jein. Es gibt getElementsByTagName(), welches Dir aber nicht nur die Kindelemente liefert. Am besten schreibst Du Dir eine Methode, die Deinen Wünschen entsprechende Ergebnisse liefert. Einfacher wäre das natürlich, wenn der IE Prototyping halbwegs brauchbar unterstützen würde ...

          Cheatah

          --
          X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
          X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
          X-Will-Answer-Email: No
          X-Please-Search-Archive-First: Absolutely Yes
    2. Hallo Andreas,

      der IE gibt als 1. child den titel an, Moz. undefined. Das neue Erkenntnis, dass JS auch unterschiedlich interpretiert wird.

      Für "meine" Zwecke ist Cheatahs Hinweis auf getElementsByTagName() sinnbringend. Denn das gibt nach erstem Test bei beiden ein Array der im Dokument überhaupt vorhandenen Tags mit dem Namen (zB. "link") zurück. Da werden die Brauserchen ja wohl nicht durschnanderkommn.

      Dank, Frankx