Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 属性节点的hasChildNodes()为Chrome和Firefox返回不同的结果_Javascript_Xml_Dom_Cross Browser - Fatal编程技术网

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

Javascript 属性节点的hasChildNodes()为Chrome和Firefox返回不同的结果,javascript,xml,dom,cross-browser,Javascript,Xml,Dom,Cross Browser,在Chrome和Firefox中分别检查此JSFIDLE: 也在此处粘贴相同的代码: 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"/&g

在Chrome和Firefox中分别检查此JSFIDLE:

也在此处粘贴相同的代码:

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();
}
var xmlStr='是一个属性节点,然后在Chrome中它有一个具有实际值的子节点。
但在Firefox中,它没有任何子节点,值存储在属性节点本身中

我很想知道有没有关于这种细微差别的文件

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


正如我刚才在评论中所说的,我认为这与DOM4中实现属性的方式与以前版本相比有所改变有关

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

选择器

var path = 'abc/@abc_attr';
var path = 'abc[@abc_attr]'
返回属性节点(Attr),本质上它根本不可能有子节点,因此Mozilla开发人员(猜测)不推荐使用hasChildNodes()作为属性

选择器

var path = 'abc/@abc_attr';
var path = 'abc[@abc_attr]'
返回节点元素(元素)

此处示例:

规范链接,使这里有点轻:


感兴趣的是,歌剧院同意ChromeMaye的观点,因为它与Webkit vs Gecko有关。Opera是基于webkit的吗?不,他们有自己的presto,我猜是很老的一个。我想我们已经超越了现代浏览器的这些细微差别。显然,这种微妙的差异实际上破坏了我工作场所的一些代码。阅读警告框中的注释,可能与根据DOM4所做的更改有关。