【发布时间】:2015-12-04 17:38:03
【问题描述】:
我正在编写一个 Chrome 扩展程序,它将搜索 DOM 并突出显示页面上的所有电子邮件地址。我发现这是在页面上查找符号,但它只在有一个电子邮件地址时正确返回,当找到多个地址时它会中断。
found = document.evaluate('//*[contains(text(),"@")]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null).snapshotItem(0);
如果找到多个返回倍数的正确方法是什么?
【问题讨论】:
-
您可以使用
innerHTML搜索带有RegExp的字符串并用元素包装它们 -
查看 this answer 以使用 XPath 选择包含特定文本的节点。
-
@PitaJ 该页面上的问题和答案很好,但这是关于属性节点的,OP 似乎想要获取包含
@字符的 element 节点.在这种情况下,问题中的 XPath 表达式就可以了。 -
@sideshowbarker 是的,我认为它至少是相关的。他的 XPath 让我可以选择带有该文本的每个节点。他只需要 while 循环遍历列表(在最后增加零)
-
@RyanGrush 在使用
document.evaluate()和 XPath 时要小心——因为它有点像一把性能枪,因为它允许您构建非常复杂的查询,但有可能就 CPU 周期而言,这些查询的评估成本可能非常高(与 CSS 选择器相比,CSS 选择器在设计上限制为不允许您执行这些复杂的查询,因为性能受到影响)。所以在这些情况下,你会想要异步使用它;例如,来自工作人员——这样在评估查询时它不会让你的整个 UI 崩溃。
标签: javascript dom xpath document.evaluate