2009-02-10 8 views
10

임의의 속성 값에 따라 임의의 노드를 찾아야합니다. 이렇게하려면 getElementsByTagName의 노드에서 getAtrribute를 사용합니다.getAttribute는 IE7에서 클래스를 반환 할 수 없습니까?

IE에서 작동하지 않는 속성으로 클래스 이름을 찾는 것처럼 보입니다 (FF로 작동).

getAtrribute가 '클래스'또는 다른 속성에 대해서만 작동하지 않는다는 것을 아는 사람은 누구입니까? (그 유일한 클래스는 내가 해결 방법을 할거야)

답변

18

jQuery과 같은 것을 사용하지 않는다면 자바 스크립트 크로스 플랫폼을 테스트 해 보는 것이 좋습니다. 그러나 클래스는 단지 특별한 것일 수 있습니다 케이스.

element.className 
2

IE는이 점에서 분류됩니다

클래스를 얻기의 크로스 플랫폼 방식으로해야한다. getAttribute("className")을 통해 IE의 클래스에 액세스 할 수 있습니다. 물론 이것은 실제로는 특성이 아니므로! IE에서는 작동하지 않습니다.

이렇게하면 "className"또는 "class"에서 element.className을 가져 오거나 getAttribute로 분기하기 위해 분기 할 수 있습니다. 안좋다.

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 

그리고 내가 누락 한 다른 데이터 유형을 반환합니다. IE에서

element.getAttribute(x) 

의 말 정확히 동일합니다

element[x] 

그래서 일반적으로 당신의 getAttribute를 사용하지 마십시오 및 '요소로 간단한 DOM 레벨 2 HTML 인터페이스를 사용해야합니다. className '대신에.

이것은 IE8에서 최종적으로 수정되었습니다.

1

요소에서 모든 속성 목록을 가져 와서 그 값을 테스트 할 수 있습니다. 이 조각은 IE와 웹킷 두 브라우저를 처리하고 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'; 
관련 문제