PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : JavaScript Dropdown: was läuft falsch?


Henrik
2007-05-27, 15:54:31
Hi

Ich möchte das modifizierte Suckerfish Dropdown (http://www.htmldog.com/articles/suckerfish/) einsetzen. Suckerfish ist ein vollständig mit CSS umgesetzter Dropdown, lediglich für den IE braucht es JavaScript, da dieser die Pseudo-Hover-Klasse nur an Links und nicht an Elemente vergeben kann.

Dieses JavaScript sieht ursprünglich so aus:

sfHover = function() {
var sfEls = document.getElementById("nav").getElementsByTagName("LI");
for (var i=0; i<sfEls.length; i++) {
sfEls[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
}
}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

Die zweite Zeile habe ich modifiziert: ich möchte keine CSS-ID, sondern eine CSS-Klasse ändern. Diese heißt auch nicht "nav", sondern "submenu". Meine Zeile daher:


var sfEls = document.getElementByClass("submenu").getElementsByTagName("LI");

Insgesamt habe ich also diesen JavaScript Code:


sfHover = function() {
var sfEls = document.getElementByClass("submenu").getElementsByTagName("LI");
for (var i=0; i<sfEls.length; i++) {
sfEls[i].onmouseover=function() {
this.className+=" sfhover";
}
sfEls[i].onmouseout=function() {
this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
}
}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);


Leider funktioniert das Script auf dem IE nicht. Da ich keine Ahnung von JavaScript habe beruhen meine Änderungen auf Vermutungen. Ist die Syntax denn korrekt oder habe ich anderweitig Fehler gemacht?

Danke!
Henrik

darph
2007-05-27, 16:02:22
getElementByClass() gibt es nicht. Und selbst, wenn es das gäbe, würdest du ein Array von allen Elementen bekommen, die diesen Klassennamen hätten, denn es muß (im Gegensatz zu id) ja nicht eindeutig sein. Das heißt, du müßtest die folgenden Befehle für alle Elemente des Arrays ausführen (dabei ist es egal, ob in dem Array nur ein Element drin steht, oder mehrere). Aber wie gesagt: Das geht so nicht.

Eventuell kannst du da was mit XPath (http://de.wikipedia.org/wiki/XPATH) machen. Das ist allerdings nicht ganz so trivial, wie ein paar Zeilen ändern - da müßtest du dich einlesen wollen. Und ich bin mir nicht sicher, ob der IE6 das mag.

Henrik
2007-05-27, 16:13:37
getElementByClass() gibt es nicht. Und selbst, wenn es das gäbe, würdest du ein Array von allen Elementen bekommen, die diesen Klassennamen hätten, denn es muß (im Gegensatz zu id) ja nicht eindeutig sein. Das heißt, du müßtest die folgenden Befehle für alle Elemente des Arrays ausführen (dabei ist es egal, ob in dem Array nur ein Element drin steht, oder mehrere). Aber wie gesagt: Das geht so nicht.

Eventuell kannst du da was mit XPath (http://de.wikipedia.org/wiki/XPATH) machen. Das ist allerdings nicht ganz so trivial, wie ein paar Zeilen ändern - da müßtest du dich einlesen wollen. Und ich bin mir nicht sicher, ob der IE6 das mag.

Okay, danke, dann ist es wohl einfacher das CSS zu ändern (ID statt Klasse).