getAttribute 在 IE7 中无法返回类?

10

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

似乎当我将类名作为属性查找时,在IE上不起作用(在FF上可以)。

有人知道getAttribute是否仅适用于'class',还是其他属性也不适用?(如果只是类,我会想出解决方法。)

5个回答

18

如果您没有使用类似于jQuery这样的工具来简化操作,那么测试所有JavaScript跨平台是值得的,但Class可能只是一个特殊情况。

以下代码应该是一种跨平台获取class的方法:

element.className

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

IE在这方面存在问题。你可以通过getAttribute("className")来访问IE中的class,但是这并不是真正的属性,所以在非IE中无法使用。

这就让你面临一个选择:要么分支获取element.className,要么分支获取"className"或"class"的getAttribute。这并不好。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接