【问题标题】:hasChildNodes() of attribute nodes return different results for Chrome and Firefox属性节点的 hasChildNodes() 为 Chrome 和 Firefox 返回不同的结果
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    选择器

    var path = 'abc/@abc_attr';
    

    返回属性节点(Attr),它本质上根本不可能有子节点,Mozilla 开发人员(猜测)有理由使属性不推荐使用 hasChildNodes()。

    选择器

    var path = 'abc[@abc_attr]'
    

    返回节点元素(Element)

    示例:

    http://jsbin.com/udugug/1

    规范链接在这里有点亮点:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-20
      • 2015-03-06
      • 1970-01-01
      相关资源
      最近更新 更多