6

この jsfiddle を Chrome と Firefox で個別に確認してください: 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

4

2 に答える 2

2

コメントに投稿したばかりのように、これは以前のバージョンとは対照的に、DOM4 での属性の実装方法の変更に関係していると思います。

以前のバージョンでは、Attrインターフェースが拡張されNodeました。これは変更されたため、メソッドを使用できなくなりNodeました。ただし、プロパティnamevalueプロパティはまだ存在します。

于 2012-11-21T19:55:08.560 に答える
0

セレクタ

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

于 2012-11-21T20:15:55.390 に答える