getAttribute不能在IE7中返回类?

时间:2009-02-10 08:42:34

标签: javascript internet-explorer-7

我需要根据随机属性值找到随机节点。 为此,我在getElementsByTagName的节点上使用getAtrribute。

似乎当我查找类名作为属性时它不适用于IE(适用于FF)。

任何人都知道getAtrribute是否仅适用于'class'或其他属性? (如果我唯一的课程,我会做一个解决方法。)

5 个答案:

答案 0 :(得分:18)

值得测试你所有的Javascript跨平台,如果你没有使用jQuery这样的东西来消除痛苦,但Class可能只是一个特例。

这应该是获得课程的跨平台方式:

element.className

答案 1 :(得分: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 Level 1/2 HTML接口,比如'element.className'。

这最终在IE8中修复。

答案 2 :(得分:2)

IE在这方面被打破了。您可以通过getAttribute("className")在IE中访问该类,但当然这不是属性,因此它不起作用!IE。

这使您可以选择分支以获取element.className或分支到“className”或“class”的getAttribute。不好。

答案 3 :(得分: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
}

答案 4 :(得分:0)

您可以在此处获取并设置具有跨浏览器兼容性的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';