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

bit*_*its 6 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();
}
Run Code Online (Sandbox Code Playgroud)

我注意到的是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

FK8*_*K82 2

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

在以前的版本中,Attr接口扩展了Node. 这已更改,因此您无法Node再使用方法。然而,namevalue属性仍然存在。