作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我使用 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();
}
...但是如果您无论如何都要遍历节点,您可能可以在循环中执行您想执行的任何数组操作。
关于javascript - 如何将 Array.from 与 XPathResult 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47017441/
我是一名优秀的程序员,十分优秀!