gpt4 book ai didi

javascript - 如何将 Array.from 与 XPathResult 一起使用?

转载 作者:行者123 更新时间:2023-11-30 09:29:47 24 4
gpt4 key购买 nike

当我使用 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可以将两种类型的对象转换成数组:

  1. 那些具有 .length 属性的“类数组”。
  2. 那些实现迭代器协议(protocol)并允许您获取其所有元素的。

XPathResult 不执行任何这些操作。您可以通过手动遍历结果并将结果存储在数组中来完成此操作,例如:

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

...但是如果您无论如何都要遍历节点,您可能可以在循环中执行您想执行的任何数组操作。

关于javascript - 如何将 Array.from 与 XPathResult 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017441/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com