Pergunta

Eu estou trabalhando em uma aplicação web móvel que precisa trabalhar no IE Mobile. Já reduzimos um erro de JavaScript Eu estou começando a IE Mobile não suporte a propriedade 'className' (motor IE4 ...). Estou tentando encontrar uma alternativa que funciona em todos os navegadores com alterações de código mínimo (já tenho algumas bibliotecas que o uso 'className').

A abordagem mais fácil que eu poderia pensar seria modificar protótipo elemento do IE para incluir className (se não tiver), o problema é que eu não sei o que a alternativa ao 'className' está no IE Mobile .

Eu tentei isso:

element.className = element.class;

O que obviamente não funciona porque class é uma palavra-chave em JavaScript e meu compressor JS não gosta disso, e provavelmente não é de qualquer maneira válido.

Além de usar 'setAttribute ()' em todos os lugares que eu preciso modificar a classe de um elemento, existe alguma propriedade que eu possa usar que é o equivalente a className?

Foi útil?

Solução

Enquanto você não pode evitar o uso setAttribute(), você pode ter uma linha para fora do playbook jQuery e usar um procedimento ajudante com um parâmetro opcional. Este código não foi testado, mas deve funcionar:

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));

Outras dicas

Sem atributo, não. Eu tenho medo que você está preso com getAttribute () e setAttribute ().

No seguimento que John Millikin, você poderia mesmo fazer essa parte função do protótipo elemento do IE:

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

ou se você quiser um método de combinação como John fornecido ...

Element.prototype.className = function(newClass) {
    if (!newClass)
        return this.getClass();
    return this.setClass(newClass);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top