试图确定一个体面的,跨浏览器的方法来获取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节点不是问题)
答案 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
属性名称似乎返回typeof
为object
的值,因此else
代码正在运行,即使ele.attributes[attr]
没有不能给你你想要的价值。
答案 2 :(得分:5)
如果存在这些属性,则您在建立之前尝试访问ele的属性。试试这种证据链:
if (ele.attributes && ele.attributes[attr] && typeof ele.attributes[attr] == 'undefined')
等