2009-02-10 33 views
10

我需要根據隨機屬性值找到隨機節點。 爲此,我在getElementsByTagName的節點上使用getAtrribute。getAttribute不能在IE7中返回類?

這似乎是當我尋找類名作爲屬性它不適用於IE瀏覽器(工程上的FF)。

任何人都知道getAtrribute是否只在'class'或其他屬性上工作? (如果它唯一的類我會做一個解決方法)。

回答

18

如果你不使用類似jQuery的東西來消除這種痛苦,但它可能只是一個特殊的案件。

這應該是獲得類的跨平臺方式:

element.className 
2

IE在這方面被打破。您可以通過getAttribute("className")訪問IE中的類,但當然這不是真正的屬性,所以它在IE中不起作用。

讓您選擇分支來獲取element.className或分支到「className」或「class」上的getAttribute。不好。

8

任何人都知道getAtrribute是否只在'class'或其他屬性上不起作用?

對於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級別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'; 
相關問題