GetAttribute не может вернуть класс в IE7?

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

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

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

Ответ 1

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

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

element.className

Ответ 2

Кто-нибудь знает, если 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.

Ответ 3

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

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

Ответ 4

Вы можете захватить список всех атрибутов из ваших элементов и проверить их значение таким образом. Этот фрагмент обрабатывает браузеры 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
}

Ответ 5

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

      //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';