【发布时间】:2017-08-05 15:05:33
【问题描述】:
在 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
【问题讨论】:
-
有兴趣的,Opera同意Chrome
-
也许它与 Webkit 与 Gecko 有关。 Opera是基于webkit的吗?
-
不,他们有自己的 presto,猜是很老的一个
-
好吧,我认为我们已经超越了现代浏览器中的这些细微差别。显然,这种细微的差别实际上破坏了我工作场所的一些代码。
-
developer.mozilla.org/en-US/docs/DOM/Attr 阅读警告框中的注释,可能与根据 DOM4 的更改有关。
标签: javascript xml dom cross-browser