2011-01-13 15 views
1

Ich habe einige Codes:Ausführen verschiedene JS für IE6/Anderen Browser

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class", "gDay gDayHover"); 

Diese in allen modernen Browsern funktionieren, aber nicht IE6. IE6 benötigt:

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("className", "gDay gDayHover"); 

ich eine andere Variable haben werde:

var addOnClassAtt; 

die entweder auf "" oder "Name", so kann ich die Einzelzeile:

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class" + addOnClassAtt, "gDay gDayHover"); 

Wie würde ich ermitteln, ob der Benutzer einen Browser ausführt, der className und nicht class erfordert? Ich würde lieber von der Browser-Erkennung weggehen und eine erste Methode zum Abfangen von Versuchen verwenden, um dies festzulegen, aber wenn dies nicht möglich ist, was ist der beste Weg?

Antwort

3

In den meisten Fällen sind Sie besser dran Feature-Erkennung zu tun, anstatt Browser-Erkennung. Feature-Erkennung ist einfacher und zuverlässiger in Javascript als Browser-Erkennung.

In diesem speziellen Fall, dann würden Sie besser dran Einstellung der Klasse wie folgt sein:

document.getElementById(...).className = "gDay gDayHover"; 

Dieser Code in allen Browsern funktionieren sollte, einschließlich IE6.

Der Grund, warum Sie ein Problem mit diesem Problem hatten, ist, dass das Klassenattribut im DOM als className bezeichnet wird. Das Wort ist deshalb so, weil das Wort class ein reserviertes Wort in JavaScript ist. Daher kann es in einigen Fällen zu Mehrdeutigkeiten führen, aber wie Sie sehen, hat die Lösung dieses Problems andere Probleme verursacht!

Die Lektion zu nehmen ist, dass setAttribute ist keine zuverlässige Funktion zum Festlegen der class Attribut verwenden. Die meisten anderen Attribute sollten mit setAttribute in Ordnung sein, obwohl einige andere auch Probleme haben können, daher ist es im Allgemeinen am besten, die DOM-Eigenschaft zu verwenden.

+0

Danke! Gute Antwort –

+0

Nicht ganz richtig: 'for' ist aus demselben Grund auch problematisch. Im Allgemeinen verwenden Sie immer die Eigenschaften des DOM-Elements anstelle von 'setAttribute'. –

+0

@Marcel Korpel - danke. Ich habe den letzten Teil meiner Antwort bearbeitet, um zu verdeutlichen, was ich meine, und um Ihren Standpunkt einzubeziehen. – Spudley

2

Verwenden Sie nicht setAttribute, um einen Klassennamen festzulegen, IE wird ausflippen; stattdessen setzen die EigenschaftclassName des DOM-Objekt:

document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover"; 
+0

Perfekte Lösung danke! Scheint in allen Browsern zu funktionieren. –

+0

Sind Sie sicher, dass IE6 mehrere Klassen in className unterstützt? – kennebec

+0

@kennebec: Ja, warum sollte es nicht? Habe das gerade getestet und es hat wie erwartet funktioniert. –

Verwandte Themen