Felix Riesterer: [object HTMLliElement] ie streikt

Beitrag lesen

Lieber Chris,

ich vermute, das Ganze ist eine Art Karrussell-Slideshow wie bei Apple (Ipod etc.)

Hmm dieser Gedanke macht mir Angst, da der Ansatz viel einfacher ist :D und meine komplizierte Lösung vielleicht einfach ersetzen könnte...

Keine Angst vor Vereinfachungen, wenn sie sinnvoll sind!

Da ich ja zu beginn eh alle LI's lade, könnte ich einfach mit display:none; die nicht benötigten verstecken. *hmmm* ich werde der Sache mal nachgehen.

Nö. Vergib Klassen! Dadurch kannst Du Dir viele element.style.-Geschichten sparen. Die <li>-Elemente, die Du nicht sehen willst, bekommen einfach eine entsprechende Klasse, in der dann natürlich display:none steht. Wenn Du das dirket über das style-Objekt machst, dann musst Du das wieder rückgängig machen, wenn denn das <li>-Element plötzlich doch sichtbar werden soll. - Nimm Klassen!

Dann schulde ich euch wohl noch meine ArrayList :) sorry war wohl etwas verwirrend.

Also im Grundegenommen ist das nur ein Wrapper für das JavaScript-eigene Array-Objekt, dem diverse Funktionalitäten angedichtet wurden (wie z.B. add()), was ja ganz sinnvoll ist, wenn man verstärkt mit Arrays arbeitet. ich hatte mir im Wesentlichen sowas schon gedacht.

hmm ja das getElementsByTagName. Ich weiss auch nicht warum ich das nie verwende. Ist eigentlich hier klar die beste Lösung

Es vereinfacht Deinen Code außerdem. Deine Lösung mag in machen Kontexten sinnvoller und eleganter sein, ich finde sie hier aber unnötig umständlich. Außerdem lauern hier "Fehler", da der IE Textknoten anders behandelt, als der Firefox (oder eben "richtige Browser"). Ein Zeilenumbruch im Quelltext kann daher bereits im FF als Textknoten (und somit child-Element) eines Elementobjektes gewertet werden. Beispiel:

<ul> <-hier entsteht ein Textknoten im FF bestehend aus Zeilenumbruch und Leerzeichen! Im IE dagegen nicht...
    <li>

richtig erkannt. die LI haben eine ID und wie slide_1 etc... weil wenn ich ja nach links und rechts klicke in meiner "slideshow" müssen andere Elemente dargestellt werden.

Muss das über die Vergabe einer ID erfolgen? Kannst Du die Slideshow nicht als großes Objekt anlegen, das intern einen Zähler hat, welches der Bilder gerade angezeigt wird, sodass im Prinzip klar sein muss, welches Bild danach, bzw. davor kommt? Das erspart Dir auch hässliche globale Variablen.

Das stimmt, es ist aber säuberer die DOM Struktur durch Node-Operationen zu verändern, anstatt innerHTML zu verwenden.

Das mag sein. Da Du aber sinnvollerweise das aus der <ul> löschst, was für die Karrussell-Galerie eben nicht benötigt wird, bist Du sogar dazu gezwungen.

Die erste Funktion war um die ArrayList zu initieren und ihr die Objekte zuzuweisen. Die zweite Funktion displayListS() managed das Darstellen der Elemente. actFirstNodeS ist eine globale Variable, die die erste ID des darzustellenden Objekts beinhaltet.

Wie gesagt, ich fände es sinnvoller, wenn Du ein großes Objekt Slideshow anlegst, das als Factory für Slideshow-Objekte dient (also eine Knstruktor-Funktion wie Deine ArrayList-Funktion). Darin sollte dann jede Slideshow selbst steuern, was sie hat und kann, also interne Zählervariablen und interne Funktionen (also Methoden) beinhalten.

Klar der technische Ansatz ist hier zu hinterfragen, in FireFox funktioniert es tadellos, leider im IE eben nicht. Und IE ist mir wichtiger :/ Darum muss ich wohl das Ganze nochmals überdenken.

Poste doch einmal eine Testseite, damit man sich das anschauen kann! Firmeninterne Entwicklung hin oder her, letzten Endes kannst Du doch mittels Lizenz und Copyright den Code unfrei machen!

Liebe Grüße aus Ellwangen,

Felix Riesterer.

--
ie:% br:> fl:| va:) ls:[ fo:) rl:° n4:? de:> ss:| ch:? js:) mo:} zu:)