Альтернатива «className» в JavaScript для IE Mobile?
-
05-09-2019 - |
Вопрос
Я работаю над мобильным веб-приложением, которое должно работать в 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);
}