fr@gma: node Syntax-Problem

Hallo,

ich habe da ein Problem untergeornete Listen anzusprechen.
Und zwar möchte ich diesen untergeordneten Listen Attribute zuweisen.

HTML-Listenbaum

<ul id="hauptnavigation">
  <li><a href=""></a>
    <ul>
     <li></li>
     <li></li>
    </ul>
  </li>
  <li><a href=""></a>
    <ul>
     <li></li>
     <li></li>
    </ul>
  </li>
</ul>

Nun möchte ich die Unterlisten im Javascript so ansprechen:

navi = document.getElementById("hauptnavigation").firstChild;

while (navi != null) {
  if(navi.nodeName == "LI")
  {
    menu = navi.getElementsByTagName("ul")[0];
           menu.setAttribute(...);
 }
 navi = navi.nextSibling;

Leider habe ich da einen Fehler drin, da mir der Firefox immer anzeigt, dass "menu" nicht definiert ist.
Wo hab ich denn da einen Denkfehler?

Vielen Dank für Eure Antworten.
fr@gma

  1. Hi,

    <ul id="hauptnavigation">
      <li><a href=""></a>
    navi = document.getElementById("hauptnavigation").firstChild;
    Leider habe ich da einen Fehler drin, da mir der Firefox immer anzeigt, dass "menu" nicht definiert ist.

    natürlich. Die Whitespace-Node zwischen dem <ul> und dem <li> ist weder null, noch hat sie Nachfahren.

    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
    1. Hi,

      <ul id="hauptnavigation">
        <li><a href=""></a>
      navi = document.getElementById("hauptnavigation").firstChild;
      Leider habe ich da einen Fehler drin, da mir der Firefox immer anzeigt, dass "menu" nicht definiert ist.

      natürlich. Die Whitespace-Node zwischen dem <ul> und dem <li> ist weder null, noch hat sie Nachfahren.

      Was meinst Du mit Whitespace-Node?
      Ich habe mir die Kindknoten von "hauptnavigation" ausgeben lassen.
      Die <li>-Tags von "hauptnavigation" werden alle erkannt.
      Der Firefox erkennt zwar auch die Zeilenumbrüche aber das fange ich ja mit if(navi.nodeName == "LI") ab.

      Cheatah

      1. Wer das Glück hat, von Cheatah eine Antwort zu bekommen, tut gut daran, sie sorgfältig zu lesen!

        Der Whitespace-Node ist ein Text-Node, der den Umbruch zwischen <ul> und <li> speichert. Er hat keine Child-Nodes.

        Versuche es lieber mit document.getElementById('hauptnavigation').getElementsByTagName('li')[0] anstelle von firstChild.

        Gruß, LX

        --
        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: Unusual
        X-Please-Search-Archive-First: Absolutely Yes
        1. Hallo Cheatah und hallo LX,

          vielen Dank für Eure Antworten, habe ich vorhin glatt vergessen, sorry!

          Wer das Glück hat, von Cheatah eine Antwort zu bekommen, tut gut daran, sie sorgfältig zu lesen!

          Der Whitespace-Node ist ein Text-Node, der den Umbruch zwischen <ul> und <li> speichert. Er hat keine Child-Nodes.

          Vielleicht habe ich ja etwas falsch verstanden, ich habe mir in der "WHILE-Schleife" mal alle Textknoten auflisten lassen.
          Der Firefox berücksichtigte zwar Zeilenumbrüche, erkennt aber auch alle <li>-Tags der <ul>. Ich habe bei meinem ersten Posting die Listenelemente ja auch nur eingerückt, damit das übersichtlicher wird.

          Versuche es lieber mit document.getElementById('hauptnavigation').getElementsByTagName('li')[0] anstelle von firstChild.

          Habe ich gerade mal probiert, das Problem besteht weterhin.
          Ich denke mal bei "menu = navi.getElementsByTagName("ul")[0];" ist irgendetwas falsch oder?

          Gruß, LX

          Gruß fr@gma

          1. Hi,

            Versuche es lieber mit document.getElementById('hauptnavigation').getElementsByTagName('li')[0] anstelle von firstChild.
            Habe ich gerade mal probiert, das Problem besteht weterhin.
            Ich denke mal bei "menu = navi.getElementsByTagName("ul")[0];" ist irgendetwas falsch oder?

            nicht nur zitieren, sondern auch lesen.

            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
            1. Hi Cheatah,

              ich habe das wie gesagt ausprobiert:

              navi = document.getElementById('hauptnavigation').getElementsByTagName('li')[0];
               zahl = 0;
               while (navi != null) {
                if(navi.nodeName == "LI")
                {
                 menu = navi.getElementsByTagName('ul')[0];
                 zahl = zahl + 1;
                 menu.setAttribute("id", "test" + zahl);
                 alert(menu.getAttribute("id"));
                }
                navi = navi.nextSibling;
              }

              Ich bekomme nun für alle Listen die Alert-Meldung (test1, test2).
              Jedoch bekomme ich immer angezeigt, das 'menu' nicht definiert ist.
              Da muss ja bei der Deklaration von 'menu' irgendwas falsch sein, oder?

              Ich frage dann eben mal anders, wie muss ich die verschachtelten <ul> ansprechen?
              Ich weiß es leider nicht, sonst würde ich ja nicht fragen.

              Viele Grüße
              fr@gma

              1. Ich nochmal, falls wieder mal jemand so ein Problem hat.
                Ich habe es hinbekommen.
                Die Fehlermeldung kam nur, da ein Listenelement der 'hauptnavigation' keine untergeordnete Liste besitzt.
                Man, manchmal steht man sich echt selbst im Weg.

                An alle die sich damit beschäftigt hatten, nochmals VIELEN DANK!!!

                Viele Grüße
                fr@gma

        2. Wer das Glück hat, von Cheatah eine Antwort zu bekommen, tut gut daran, sie sorgfältig zu lesen!

          Definiere Glueck!

          ;)

          --
          Trau Dich!