是否存在需要getAttributeNode和/或getAttributeNodeNS的实际用例?

时间:2011-06-03 15:15:45

标签: javascript web-services web-applications

有人会想到实际用例,我们要求使用getAttributeNode和/或getAttributeNodeNS

据我所知,getAttribute和/或getAttributeNS解决了所有用例,因此这个问题。

3 个答案:

答案 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的getAttributesetAttribute错误的解决方法很有用。例如,采用以下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有很多用例。