getAttribute не может вернуть класс в IE7? - PullRequest
10 голосов
/ 10 февраля 2009

Мне нужно найти случайные узлы в соответствии со случайными значениями атрибутов. Для этого я использую getAtrribute на узлах из getElementsByTagName.

Кажется, что когда я ищу имя класса в качестве атрибута, оно не работает в IE (работает в FF).

Кто-нибудь знает, работает ли getAtrribute не только с классом или другими атрибутами? (если это единственный класс, я сделаю обходной путь.)

Ответы [ 5 ]

18 голосов
/ 10 февраля 2009

Стоит протестировать все ваши кроссплатформенные Javascript, если вы не используете что-то вроде jQuery , чтобы убрать боль, но Class может быть просто особым случаем.

Это должен быть кроссплатформенный способ получения класса:

element.className
8 голосов
/ 10 февраля 2009

Кто-нибудь знает, работает ли getAtrribute не только для класса или других атрибутов?

Сбой для всех атрибутов, если имя атрибута HTML отличается от имени свойства DOM (className, htmlFor), плюс вам нужно использовать заглавные буквы в стиле DOM. Он также возвращает неправильный тип данных для атрибутов, свойства DOM которых не являются строками:

disabled, readOnly, checked, selected, multiple,
compact, declare, isMap, noHref, defer, noResize,
size, cols, rows, width, height, hspace, vspace,
maxLength, tabIndex, colSpan, rowSpan

и, возможно, другие, которые я пропустил!

element.getAttribute(x)

в IE это точно так же, как сказать:

element[x]

Поэтому в общем случае вам следует избегать использования getAttribute и использовать вместо этого простые HTML-интерфейсы DOM Level 1/2, такие как element.className.

Это окончательно исправлено в IE8.

2 голосов
/ 10 февраля 2009

IE не работает в этом отношении. Вы можете получить доступ к классу в IE через getAttribute("className"), но, конечно, это не тот атрибут, поэтому он не работает в! IE.

Это оставляет вам выбор ветвления для получения element.className или ветвления для getAttribute для "className" или "class". Не хорошо.

1 голос
/ 15 апреля 2010

Вы можете получить список всех атрибутов из ваших элементов и проверить их значение таким образом. Этот фрагмент обрабатывает браузеры IE и WebKit и возвращает строковое значение класса CSS:

var value = "";
var elements = document.getElementsByTagName("div");

for(var i = 0; i < elements.length; i++){
    if(typeof elements[i].attributes['class'] == "undefined"){
        value = elements[i].getAttribute("class"); 
    } else {
      value = elements[i].attributes['class'].nodeValue;
    }

    alert(value); // careful, this will be a lot of alerts
}
0 голосов
/ 27 декабря 2013

Здесь вы можете получить и установить атрибут класса с совместимостью с различными браузерами.

      //also works with IE7 and below

      //get class attribute value
      var class_name = document.getElementById('elem_id').className;

      //set class attribute
      document.getElementById('elem_id').className  = 'new-class-name';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...