Вопрос

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

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

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

element.className = element.class;

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

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

Это было полезно?

Решение

Хотя вы не можете избежать использования 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));

Другие советы

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

Следуя примеру Джона Милликина, вы могли бы даже сделать эту функцию частью прототипа элемента 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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top