跨浏览器,javascript getAttribute()方法?

时间:2010-09-20 20:30:28

标签: javascript

试图确定一个体面的,跨浏览器的方法来获取javascript属性?假设javascript库使用(jQuery / Mootools / etc。)不是一个选项。

我已经尝试了以下内容,但是当IE尝试使用“else”方法时,我经常得到“属性”为null或不是对象错误。有人可以帮忙吗?

<script type="text/javascript">
//...
    getAttr: function(ele, attr) {
      if (typeof ele.attributes[attr] == 'undefined'){
        return ele.getAttribute(attr);
      } else {
        return ele.attributes[attr].nodeValue;
      }
    },
//...
</script>


<div>
 <a href="http://www.yo.com#foo">Link</a>
</div>

使用上面的html,在每个浏览器中,我如何getAttr(ele,'href')? (假设选择ele节点不是问题)

3 个答案:

答案 0 :(得分:16)

对于绝大多数情况,您只需使用内置的getAttribute函数。

e.g。

ele.getAttribute(attr)

根据QuirksMode,这适用于所有主流浏览器(包括IE&gt; = 6),但有一个小例外:

在IE5-7中,访问style属性会给出一个对象,访问onclick属性会给出一个围绕实际内容的匿名函数。

答案 1 :(得分:10)

关于你的问题的更新,你可以试试这个。

它可能有点过分,但如果getAttribute()和点表示法没有返回结果,它会遍历attributes对象以尝试查找匹配项。

示例: http://jsfiddle.net/4ZwNs/

var funcs = {
    getAttr: function(ele, attr) {
        var result = (ele.getAttribute && ele.getAttribute(attr)) || null;
        if( !result ) {
            var attrs = ele.attributes;
            var length = attrs.length;
            for(var i = 0; i < length; i++)
                if(attrs[i].nodeName === attr)
                    result = attrs[i].nodeValue;
        }
        return result;
    }
};

var result = funcs.getAttr(el, 'hash');

但是,您可以进行一些跨浏览器测试。 :O)


使用ele.attributes,您需要通过索引访问它们,如:

ele.attributes[0].nodeName;   // "id" (for example)
ele.attributes[0].nodeValue;  // "my_id" (for example)

尝试传递attributes属性名称似乎返回typeofobject的值,因此else代码正在运行,即使ele.attributes[attr]没有不能给你你想要的价值。

答案 2 :(得分:5)

如果存在这些属性,则您在建立之前尝试访问ele的属性。试试这种证据链:

if (ele.attributes && ele.attributes[attr] && typeof ele.attributes[attr] == 'undefined')