Альтернатива «className» в JavaScript для IE Mobile? - PullRequest
1 голос
/ 08 апреля 2009

Я работаю над мобильным веб-приложением, которое должно работать в IE Mobile. Я сузил ошибку JavaScript, которую я получаю в IE Mobile, не поддерживающем свойство className (движок IE4 ...). Я пытаюсь найти альтернативу, которая работает во всех браузерах с минимальными изменениями кода (у меня уже есть несколько библиотек, использующих 'className').

Самым простым подходом, который я мог бы придумать, было бы изменение прототипа элемента IE для включения в него className (если его нет), проблема в том, что я не знаю, в чем альтернатива 'className' IE Mobile.

Я пробовал это:

element.className = element.class;

Что, очевидно, не работает, потому что class - это ключевое слово в JavaScript, и моему компрессору JS это не нравится, и, вероятно, оно в любом случае недопустимо.

Кроме использования setAttribute () везде, где мне нужно изменить класс элемента, есть ли какое-либо свойство, которое я могу использовать, которое эквивалентно className?

Ответы [ 3 ]

2 голосов
/ 13 апреля 2009

Хотя вы не можете избежать использования setAttribute(), вы можете вычеркнуть строку из книги воспроизведения jQuery и использовать вспомогательную процедуру с необязательным параметром. Этот код не проверен, но должен работать:

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 голос
/ 14 апреля 2009

Следуя тому, что Джон Милликин, вы могли бы даже сделать эту функцию частью прототипа элемента IE:

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

или если вы хотите комбинированный метод, как при условии Джона ...

Element.prototype.className = function(newClass) {
    if (!newClass)
        return this.getClass();
    return this.setClass(newClass);
}
1 голос
/ 08 апреля 2009

Нет атрибута, нет. Боюсь, вы застряли с getAttribute () и setAttribute ().

...