2017-10-30 8 views
0

querySelectorAllを使用すると、サンプルドキュメントに138 td個のノードが見つかります。Array.fromをXPathResultで使用する方法?

Array.from(document.querySelectorAll('td')).length 
138 

私は、XPathと同じことを行うと、私は結果を取得しない:少なくとも一つの一致があるものの

Array.from(document.evaluate(".//td", document.body, null, XPathResult.ANY_TYPE, null)).length 
0 

を:

document.evaluate(".//td", document.body, null, XPathResult.ANY_TYPE, null).iterateNext().nodeName 
"TD" 

問題がArray.fromができることのようですXPathResultを反復処理しないでください。でも、これは0を返します。

Array.from(document.evaluate('.', document.body, null, XPathResult.ANY_TYPE, null)).length 
0 

Array.fromためXPathResultが適して作るためにどのように?

答えて

2

残念ながら、あなたはできません。

  1. 「アレイ状」.length特性を有しているもの:Array.fromは、配列に2つのタイプのオブジェクトを変換することができます。
  2. イテレータプロトコルを実装し、すべての要素を取得できるもの。

XPathResultこれらのいずれも行いません。手動で結果を反復処理し、のような配列に結果を格納することによってこれを行うことができます:

const nodes = []; 
let node = xPathResult.iterateNext(); 
while (node) { 
    nodes.push(node); 
    node = xPathResult.iterateNext(); 
} 

...しかし、あなたはとにかくノードをループするつもりなら、あなたはおそらく、どんな配列操作を行うことができますあなたはループの中でやりたいと思っていました。

関連する問題