使用querySelectorAll
时,可以在示例文档中找到138个td
节点。
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
如何使
XPathResult
适合Array.from
? 最佳答案
不幸的是你不能。 Array.from
可以将两种类型的对象转换为数组:
那些具有.length
属性的“类似数组”的数组。
那些实现迭代器协议并允许您获取其所有元素的控件。XPathResult
不执行任何这些操作。您可以通过手动遍历结果并将结果存储在数组中来实现此目的,例如:
const nodes = [];
let node = xPathResult.iterateNext();
while (node) {
nodes.push(node);
node = xPathResult.iterateNext();
}
...但是如果您仍然要遍历节点,则可能可以执行您想在循环中执行的任何数组操作。