javascript - 属性节点的 hasChildNodes() 为 Chrome 和 Firefox 返回不同的结果

标签 javascript xml dom cross-browser

在 Chrome 和 Firefox 中分别检查这个 jsfiddle:http://jsfiddle.net/9aE2p/1/

这里也粘贴相同的代码:

var xmlStr = '<?xml version="1.0" encoding="UTF-8"?><abc abc_attr="abc_attr_value"><abc_child abc_child_attr="abc_child_attr_value1"/><abc_child abc_child_attr="abc_child_attr_value2"/></abc>';

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlStr, "text/xml");

var path = 'abc/@abc_attr';

var nodes = xmlDoc.evaluate(path, xmlDoc, null, XPathResult.ANY_TYPE, null);

var result = nodes.iterateNext();

while (result) {
    var textContent = '<BR>result.textContent: "' + result.textContent + '"';
    var nodeType = '<BR>result.nodeType: "' + result.nodeType + '"';
    var resultHasChildren = '<BR>result.hasChildNodes(): ' + result.hasChildNodes();

    document.write(nodeType);
    document.write(textContent);
    document.write(resultHasChildren);

    result = nodes.iterateNext();
}

我注意到 hasChildNodes() 对 Firefox 返回 false,对 Chrome 返回 true。

如果 nodeType是一个属性节点,那么在 Chrome 中它有一个具有实际值的子节点。 但在 Firefox 中,它没有任何子节点,值存储在属性节点本身中。

我很想知道是否有关于这种细微差别的任何文档?

我已经检查了以下文档,但找不到任何此类细节:

https://developer.mozilla.org/en-US/docs/DOM/Node.hasChildNodes

http://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/core.html#ID-810594187

最佳答案

正如刚刚在我的评论中发布的那样,我认为这与 DOM4 中与以前版本相比属性实现方式的变化有关。

在以前的版本中,Attr 接口(interface)扩展了 Node。这已更改,因此您不能再使用 Node 方法。但是,namevalue 属性仍然存在。

关于javascript - 属性节点的 hasChildNodes() 为 Chrome 和 Firefox 返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13500073/

相关文章:

Javascript:如何随机改变背景?

javascript - 如何仅使用没有库的 javascript 从具有相同类的不同 div 获取值的总和?

python - 使用 ElementTree 进行 XPath 搜索

android - 有什么方法可以定义多个样式文件以避免在 Android 中使用一个巨大的样式文件吗?

javascript - 无法从 SOAP 解析 xml

javascript - React DOM 必须使用 className 吗?为什么我没有看到任何警告?

javascript - 将事件监听器添加到文档,而不是检查元素是否存在,然后添加事件监听器

javascript - 如何从 'HTML form' 接收值到 JavaScript 代码?

javascript - 如何过滤具有保存值javascript的对象数组

javascript - 如何使操作发生在元素的当前实例上?