getElementsByTagName und OPERA
Stefan G.
- javascript
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
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
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
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
bei meiner 6.05[en]:
File -> Preferences -> Multimedia -> Report JavaScript errors
Danke, habs gefunden und aktiviert.
Trotzdem bleibt eine Fehlermeldung aus.
Gruß, Stefan
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
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
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
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