2009-04-08 10 views
1

Ich arbeite an einer mobilen Web App, die in IE Mobile funktionieren soll. Ich habe einen JavaScript-Fehler eingegrenzt Ich bekomme zu IE Mobile nicht unterstützt die 'className' Eigenschaft (IE4-Engine ...). Ich versuche, eine Alternative zu finden, die über alle Browser mit minimalen Codeänderungen funktioniert (ich habe bereits einige Bibliotheken, die 'className' verwenden).Alternative zu 'className' in JavaScript für IE Mobile?

Der einfachste Ansatz, den ich denken könnte wäre, IE Element-Prototyp zu ClassName (wenn es nicht) zu ändern, das Problem ist, dass ich nicht weiß, was die Alternative zu "className" in IE ist Handy, Mobiltelefon.

Ich habe dies versucht:

element.className = element.class; 

Welche funktioniert nicht offensichtlich, weil class ein Schlüsselwort in JavaScript ist und mein JS Kompressor mag es nicht, und es ist wahrscheinlich sowieso nicht gültig.

Anders als mit 'setAttribute()' überall, wo ich die Klasse eines Elements ändern muss, gibt es eine Eigenschaft, die ich verwenden kann, die dem Klassennamen entspricht?

+0

"... IE4 Motor" - autsch! und ich dachte, das Unterstützen von IE6 war hart! – scunliffe

Antwort

2

Während Sie die Verwendung von setAttribute() nicht vermeiden können, können Sie eine Zeile aus dem jQuery-Playbook entfernen und eine Hilfsprozedur mit einem optionalen Parameter verwenden. Dieser Code ist nicht getestet, aber funktionieren sollte:

Element.prototype.getClass = function() { 
    return obj.getAttribute ('class'); 
} 
Element.prototype.setClass = function(newClass) { 
    return obj.setAttribute('class', newClass); 
} 

oder wenn Sie ein Combo-Methode:

var className = function (obj, value) 
{ 
    if (value !== undefined) 
    { 
     return obj.setAttribute ('class', value); 
    } 
    return obj.getAttribute ('class'); 
}; 

// Use as 
alert (className (element)); 
className (element, "foo"); 
alert (className (element)); 
1

Kein Attribut, nein. Ich fürchte, Sie stecken mit getAttribute() und setAttribute() fest.

1

auf das, was John Millikin Anknüpfend, Sie selbst diese Funktion Teil des IE-Element Prototyp machen könnte wie John zur Verfügung gestellt ...

Element.prototype.className = function(newClass) { 
    if (!newClass) 
     return this.getClass(); 
    return this.setClass(newClass); 
} 
+0

P.S. Da Elemente mehrere Klassen haben können, möchten Sie vielleicht (ich weiß nicht, wie komplex Ihre App ist) diese Funktionen so erweitern, dass bestimmte Klassen hinzugefügt/entfernt werden können, ohne dass der Benutzer eine Menge String-Parsing durchführen muss, um die vorhandenen Klassen zu erhalten. Ich werde die Details davon dir überlassen – machineghost