有人会想到实际用例,我们曾要求使用getAttributeNode
和/或getAttributeNodeNS
?
据我所知,getAttribute
和/或getAttributeNS
解决了所有用例,因此这个问题。
答案 0 :(得分:1)
它允许您将项目作为Node获取,Node是其他DOM组件(如元素,处理指令,注释等)共享的接口,因此您可以将其视为与其他项目类似。不知道为什么,但你可以......:)
例如:
<button id="choose_attr">choose attribute node</button>
<button id="choose_text">choose text node</button>
<button id="getchosennodevalue">get chosen node's value</button>
<script>
var chosenNode;
document.getElementById('choose_attr').addEventListener('click', function (e) {
chosenNode = e.target.getAttributeNode('id'); // Attribute node
}, false);
document.getElementById('choose_text').addEventListener('click', function (e) {
chosenNode = e.target.firstChild; // Text node
}, false);
document.getElementById('getchosennodevalue').addEventListener('click', function () {
alert(chosenNode.nodeValue); // We can get the value with a shared property, no matter if it is a text node, comment node, element, attribute node, etc.
}, false);
</script>
即使您只使用变量来存储属性节点,也可能希望将它预先构建到与其他类型(如字符串)不同的特殊对象中。
虽然你的问题是关于getAttributeNode *,但就一般情况下使用属性节点而言,我认为对document.createAttribute
这样的人来说可能更方便,你可以创建然后传递这样一个节点稍后将其设置在元素上。但是获得一个现有的属性确实似乎不太通用(尽管可以想象你传递属性节点的情况,有时在没有元素的情况下重新创建,有时从现有元素中检索 - 使用getAttributeNode可以避免构建你的拥有getter和setter并使用相同接口处理它们的自己的对象。)
答案 1 :(得分:1)
确实很少有理由使用getAttributeNode()
。但是,我发现它在过去作为Internet Explorer的getAttribute
和setAttribute
错误的解决方法很有用。例如,采用以下HTML:
<div id="test" onclick="alert()">
和以下代码:
var test = document.getElementById("test");
alert(typeof test.getAttribute("onclick"));
Internet Explorer 7及更低版本将在警报中报告function
,与新版本和其他正确报告string
的浏览器不同。解决方法涉及getAttributeNode()
:
alert(typeof test.getAttributeNode("onclick").nodeValue);
在所有浏览器中正确输出string
,虽然性能成本很低。同样的问题适用于可以通过属性设置的布尔值和其他非字符串属性。当然,如果IE没有这个bug,这就没有必要了,但它让我感激有getAttribute()
的替代品。
我为你设置了一个测试和玩耍的例子 - http://jsfiddle.net/PVjn5/。在jQuery.com上也有a ticket I filed关于它。
答案 2 :(得分:0)
您需要在单个对象中封装属性名称和值(以及命名空间,如果适用)的情况下使用它们。在通过JavaScript操作HTML用户界面时执行此操作的用例可能很少见。但是,浏览器实现DOM specification并且必须提供这些方法才能满足规范。当DOM没有用于操作基于HTML的用户界面时,DOM有很多用例。