Stefan G.: getElementsByTagName und OPERA

Hallo zusammen,

ich habe folgende Javascript-Function geschrieben:

function changeSubmenu(zahl){
    var strColor = "#000000";
    for(i=0;i<5;i++){
        if (i==zahl){
            strColor = "#FFAA22";
        }
        else{
            strColor = "#000000";
        }
        document.getElementsByTagName("a")[i].style.color=strColor;
    }
}

Diese ändert die Farbe, wenn eine Menupunkt (Menu ist in eigenem Frame) angeklickt wurde. Funktioniert mit IE 6 und Mozilla 1.1 auch wunderbar. Nur mit Opera will es nicht so recht klappen. Ich habe mit Version 6.05 getestet.

Ich habe nachgelesen, dass Opera die Methode getElementsByTagName zwar kennt, dass es aber trotzdem zu Problemen kommen kann. Nun meine Fragen: Habe ich etwas falsch gemacht bzw. übersehen? Wenn nicht, welche andere Möglichkeit gibt es, unter Opera das gewünschte Resultat zu erzielen?

Viele Grüße
Stefan

  1. Hallo Stefan,

    Ich habe mit Version 6.05 getestet.

    Ich weiß nicht mehr genau mit welcher Unterversion der 6 Opera die Unterstützung von getElementsByTagName eingebaut hat, daher meine Arbeitshypothese: Deine 6.05 kann das einfach nicht.

    Falls das stimmt, müsste übrigens Dein Opera eine Fehlermeldung ausspucken (sofern Du das aktivierst hast), dass er mit getElementsByTagName nix anfangen kann. Und Opera 7 sollte es dann können.

    Grüße,

    Utz

    1. Hallo Utz,

      danke für die schnelle Antwort.

      Falls das stimmt, müsste übrigens Dein Opera eine Fehlermeldung ausspucken (sofern Du das aktivierst hast), dass er mit getElementsByTagName nix anfangen kann. Und Opera 7 sollte es dann können.

      Eine Fehlermeldung gibt Opera nicht zurück. Wie kann ich das denn aktivieren/deaktivieren?

      Gruß, Stefan

      1. Hallo Stefan,

        Eine Fehlermeldung gibt Opera nicht zurück. Wie kann ich das denn aktivieren/deaktivieren?

        bei meiner 6.05[en]:

        File -> Preferences -> Multimedia -> Report JavaScript errors

        Grüße,

        Utz

        1. bei meiner 6.05[en]:

          File -> Preferences -> Multimedia -> Report JavaScript errors

          Danke, habs gefunden und aktiviert.
          Trotzdem bleibt eine Fehlermeldung aus.

          Gruß, Stefan

  2. Hi!

    Ich habe nachgelesen, dass Opera die Methode getElementsByTagName zwar kennt, dass es aber trotzdem zu Problemen kommen kann. Nun meine Fragen: Habe ich etwas falsch gemacht bzw. übersehen? Wenn nicht, welche andere Möglichkeit gibt es, unter Opera das gewünschte Resultat zu erzielen?

    Keine Ahnung. Richtig mit DOM umgehen kann der Opera erst seit version sieben. Möglicherweise gibt Opera zwar vor document.getElementsByTagName("a") zu kennen, aber drauf verlassen würde ich mich nicht. Bau erstmal test weise eine alert(document.getElementsByTagName("a")) oder auch lert(document.getElementsByTagName("a").length) ein, damit du sicher sein kannst, das Opera ein Array mit a-Elementen generiert und ob dessen Länge stimmt.

    Gruß Herbalizer

    --
    SELF-Code: (http://emmanuel.dammerer.at/selfcode.html)
    sh:( fo:) ch:? rl:( br:> n4:& ie:% mo:} va:} de:] zu:) fl:{ ss:) ls:& js:|
  3. Hallo, Stefan,

    Opera 6.x kann getElementsByTagName wie es scheint problemlos, die Ursache deiner Beobachtung ist, dass diese Version Operas das Umfärben von Links nicht erlaubt, da für sie anscheinend weiterhin die Standard-Linkformatierungen beziehungsweise die a:link-Regeln gelten. Normale Elemente könntest du mit getElementsByTagName und style.color umfärben, nur eben Links nicht.

    Ich dachte an ein Ändern der Klasse über className anstatt style.color, aber das mag Opera 6.05 auch nicht, was mich überrascht. setAttribute('class', '...') bringt ebenfalls nichts. Eine weitere Möglichkeit fällt mir nicht ein. Zugriff auf die Stylesheets hat man in Opera 6.x auch nicht.

    Mathias

    1. Hallo Mathias,

      Opera 6.x kann getElementsByTagName wie es scheint problemlos, die Ursache deiner Beobachtung ist, dass diese Version Operas das Umfärben von Links nicht erlaubt, da für sie anscheinend weiterhin die Standard-Linkformatierungen beziehungsweise die a:link-Regeln gelten. Normale Elemente könntest du mit getElementsByTagName und style.color umfärben, nur eben Links nicht

      Danke für die ausführliche Antwort. Jetzt wird mir einiges klar.
      Wäre es möglich in Opera 6.x einen Link mit getElementById
      umzufärben? Wenn dich richtig verstanden habe, wohl nicht.

      Grüße, Stefan

      1. Hallo Stefan,

        Wäre es möglich in Opera 6.x einen Link mit getElementById
        umzufärben? Wenn dich richtig verstanden habe, wohl nicht.

        Nein, meines Wissens nicht. Ich wollte ausdrücken, dass es nicht entscheidend (das heißt gleichgültig im Hinblick auf dein Problem) ist, welche Methode du anwendest, um eine Referenz auf das Elementobjekt zu bekommen (document.links, getElementById/getElementsByName/getElementsByTagName, this...). Denn diese Methoden funktionieren im Opera 6.x ausnahmslos. Entscheidend ist, dass es anscheinend keine Möglichkeit gibt, die Eigenschaften des DOM-Knotens so zu verändern, dass der von dir gewünschte Effekt eintritt. Im Opera 6.x funktioniert nämlich keine dieser Methoden (style.color, className). Vielleicht kennt jemand aber noch eine weitere Methode.
        Bezüglich deines Menüs kann ich dir folglich nur raten, es anders zu lösen, falls du einen solchen Effekt unbedingt auch für Opera <7 willst. Aber falls du es serverseitig löst, schwinden höchstwahrscheinlich die Vorteile deines Framesets.

        Grüße,
        Mathias