Hilli: getElementById - Alternative gesucht...

Hi zusammen

Javascript-Newbie bittet um Hilfe:

Aufgabe: CSS-Dropdown mit Javascript-Krücke für Internet Explorer
Verwenden möchte ich die Version von Alistapart (http://www.alistapart.com/articles/horizdropdowns).

Das JS:

startList = function() {
if (document.all&&document.getElementById) {
navRoot = document.getElementById("nav");
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
  }
  node.onmouseout=function() {
  this.className=this.className.replace(" over", "");
   }
   }
  }
 }
}
window.onload = startList;

Nun habe ich aber nicht die Möglichkeit er Liste eine ID zu verpassen, lediglich eine Klasse:

<ul class='nav'>
<li>.....

Läßt sich das JS irgendwie ändern damit es auch mit einer Klasse funktioniert?
Hab es irgendwie mit getElementsByTagName versucht, da reichen aber meine bescheidenen JS-Kenntnisse nicht aus...
Bitte um Hilfe - Danke

Hilli

P.s.: Die Menue-Version von Alistapart ist nicht Pflicht, wenn es mit einer anderen funktionieren könnte - gern - hier bitte ich um Tipps

  1. hi,

    Nun habe ich aber nicht die Möglichkeit er Liste eine ID zu verpassen, lediglich eine Klasse:

    <ul class='nav'>

    Und warum geht keine ID?

    Läßt sich das JS irgendwie ändern damit es auch mit einer Klasse funktioniert?

    Möglich.
    Da aber mehrere Elemente die selbe Klasse besitzen können, ist dass dann u.U. nicht eindeutig.
    Du musst also auch noch ein Verhalten des Scriptes für so einen Fall definieren.

    Hab es irgendwie mit getElementsByTagName versucht,

    Und wie?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. hi,

      Nun habe ich aber nicht die Möglichkeit er Liste eine ID zu verpassen, lediglich eine Klasse:

      <ul class='nav'>

      Und warum geht keine ID?

      Ist aus einem alten CMS bei dem ich keinen Zugriff habe.
      <ul class='nav'> ist alles was ich zur Verfügung habe.
      Das JS kann ich aber als externes JS mittels include in den Head einfügen.

      Läßt sich das JS irgendwie ändern damit es auch mit einer Klasse funktioniert?

      Möglich.
      Da aber mehrere Elemente die selbe Klasse besitzen können, ist dass dann u.U. nicht eindeutig.
      Du musst also auch noch ein Verhalten des Scriptes für so einen Fall definieren.

      Was ich bisher sehen kann kommt diese Klasse nur einmal vor.
      Was wäre die Möglichkeit das JS zu ändern damit es funktioniert?

      Danke

      Hilli

      1. hi,

        Was wäre die Möglichkeit das JS zu ändern damit es funktioniert?

        Beispielweise alle UL ermitteln (getElementsByTagName), und diese dann durchlaufen, bis das mit der gesuchten Klasse (.className) gefunden wurde.

        gruß,
        wahsaga

        --
        /voodoo.css:
        #GeorgeWBush { position:absolute; bottom:-6ft; }
        1. Huhu,

          Beispielweise alle UL ermitteln (getElementsByTagName), und diese dann durchlaufen, bis das mit der gesuchten Klasse (.className) gefunden wurde.

          Da gab es doch mal einen Beitrag von 2 Jahren in diesem Forum, wo einer eine Funktion getElementByClass geschrieben hat...?

          gruss
          LeKuchen

          1. Hallo LeKuchen.

            Da gab es doch mal einen Beitrag von 2 Jahren in diesem Forum, wo einer eine Funktion getElementByClass geschrieben hat...?

            Siehe Archivsuche: </archiv/2004/12/t95717/#m580943>

            Einen schönen Freitag noch.

            Gruß, Ashura

            --
            sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
            mathbr:del.icio.us/ mathbr:w00t/
            1. Hallo,

              Siehe Archivsuche: </archiv/2004/12/t95717/#m580943>

              Wobei der Ansatz zwei Jahre frueher zustande kam und dann noch verfeinert wurde.

              MfG, Thomas

              1. Hallo Thomas.

                Wobei der Ansatz zwei Jahre frueher zustande kam und dann noch verfeinert wurde.

                Hm, warum aber das hier?

                teststr=","+all_obj[i].className.split(" ").join(",")+",";  
                  if(teststr.indexOf(","+class_name+",")!=-1)
                

                Warum so umständlich und nicht einfach nur indexOf angewandt auf all_obj[i].className?

                Einen schönen Freitag noch.

                Gruß, Ashura

                --
                sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                mathbr:del.icio.us/ mathbr:w00t/
                1. Hallo,

                  Warum so umständlich und nicht einfach nur indexOf angewandt auf all_obj[i].className?

                  Auch die Angabe mehrerer Klassennamen sollte beruecksichtigt werden.

                  MfG, Thomas

                  1. Hallo Thomas.

                    Warum so umständlich und nicht einfach nur indexOf angewandt auf all_obj[i].className?

                    Auch die Angabe mehrerer Klassennamen sollte beruecksichtigt werden.

                    Ah, alles klar. Danke.

                    Einen schönen Freitag noch.

                    Gruß, Ashura

                    --
                    sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                    mathbr:del.icio.us/ mathbr:w00t/
                2. Hi,

                  Wobei der Ansatz zwei Jahre frueher zustande kam und dann noch verfeinert wurde.
                  Hm, warum aber das hier?

                  teststr=","+all_obj[i].className.split(" ").join(",")+",";

                  if(teststr.indexOf(","+class_name+",")!=-1)

                  
                  >   
                  > Warum so umständlich und nicht einfach nur indexOf angewandt auf all\_obj[i].className?  
                    
                  Weil (wie Thomas schon erwähnte) mehrere Klassen im class-Attribut stehen können und vor allem auch, weil z.B. der Name einer Klasse einen anderen enthalten kann.  
                    
                  Wenn z.B. ein getElementsByClassName("lub") gemacht wird, soll ein <span class="bla blubb"> nicht gefunden werden.  
                  Ein einfaches indexOf würde dieses Element aber erwischen, da ja im class-Attribut der Substring "lub" vorkommt.  
                    
                  cu,  
                  Andreas
                  
                  -- 
                  [Warum nennt sich Andreas hier MudGuard?](http://www.Mud-Guard.de/)  
                  [Schreinerei Waechter](http://www.schreinerei-waechter.de/)  
                  [O o ostern ...](http://ostereier.andreas-waechter.de/)  
                  Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.  
                  
                  
            2. Hallo Ashura,

              Siehe [..]: </archiv/2004/12/t95717/#m580943>

              Ich wollte ihm doch nicht die ganze Arbeit abnehmen...;o)

              LeKuchen

      2. Hi,

        <ul class='nav'> ist alles was ich zur Verfügung habe.

        ist das stets die erste UL im Quelltext? Dann wäre document.getElementsByTagName('ul')[0] am effektivsten.

        freundliche Grüße
        Ingo

  2. Hi Hilli

    Schau mal auf http://www.german-digit.de/beispiele/ie7_menue/
    Diese Navi sollte das können...

    Viel Spaß damit ;-)

    Gerhard

    1. Super, danke!

      Hilli