2009-04-08 6 views
1

Je travaille sur une application web mobile qui doit fonctionner dans IE Mobile. J'ai réduit une erreur JavaScript J'arrive à IE Mobile ne supportant pas la propriété 'className' (moteur IE4 ...). J'essaie de trouver une alternative qui fonctionne dans tous les navigateurs avec un minimum de changements de code (j'ai déjà quelques bibliothèques qui utilisent 'className'). L'approche la plus simple que je pourrais envisager serait de modifier le prototype d'élément d'IE pour inclure className (s'il ne l'a pas), le problème est que je ne sais pas quelle est l'alternative à 'className' dans IE Mobile.Alternative à 'className' en JavaScript pour IE Mobile?

J'ai essayé ceci:

element.className = element.class; 

Ce qui ne fonctionne évidemment pas parce que class est un mot-clé en JavaScript et mon compresseur JS ne l'aime pas, et il est probablement pas valable de toute façon.

En plus d'utiliser 'setAttribute()' partout où j'ai besoin de modifier la classe d'un élément, y a-t-il une propriété que je peux utiliser qui soit l'équivalent de className?

+0

"... moteur IE4" - aïe! et je pensais que soutenir IE6 était difficile! – scunliffe

Répondre

2

Bien que vous ne puissiez pas éviter d'utiliser setAttribute(), vous pouvez extraire une ligne du playbook jQuery et utiliser une procédure d'assistance avec un paramètre facultatif. Ce code est non testé, mais devrait fonctionner:

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

Aucun attribut, non. Je crains que vous ne soyez bloqué avec getAttribute() et setAttribute().

1

Faisant suite à ce que John Millikin, vous pourriez même faire partie de la fonction du prototype d'élément d'IE:

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

ou si vous voulez une méthode combo comme John fourni ...

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

P.S. Étant donné que les éléments peuvent avoir plusieurs classes, vous pouvez même (je ne sais pas à quel point votre application est complexe) vouloir rendre ces fonctions suffisamment avancées pour ajouter/supprimer des classes spécifiques, sans que l'utilisateur fasse une tonne d'analyse de chaîne pour préserver les classes existantes. Je vais vous laisser les détails de cela – machineghost