2009-02-10 2 views
10

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

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

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

ответ

18

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

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

element.className 
2

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

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

8

Кто-нибудь знает, если 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, и использовать простые DOM Level 1/2 HTML интерфейсы, такие как элемент». className '.

Это, наконец, исправлено в IE8.

1

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

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

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