首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将XPathResults与document.evaluate合并

将XPathResults与document.evaluate合并
EN

Stack Overflow用户
提问于 2009-10-01 08:52:05
回答 1查看 706关注 0票数 2

我正在做一堆document.evaluate,然后在result.snapshotLength上使用一个for循环迭代每个结果。

因为我在每个循环(一个thisDiv.parentNode.removeChild)中做同样的事情,所以我只想做一个循环。

我读过:

第五个参数可用于合并两个XPath查询的结果。传递以前调用document.evaluate的结果,它将返回这两个查询的合并结果。

所以我试着:

代码语言:javascript
复制
comDivs = document.evaluate(
    "//div[@class='class name 1']",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    null);

ggDivs = document.evaluate(
    "//div[@class='class name 2']",
    document,
    null,
    XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,
    comDivs);

但是这不起作用(虽然我没有错误日志,但它就是不起作用)。

正确的方法是什么?我可以运行不同的XPath查询并合并结果吗?或者是否有一种方式将正则表达式或某种替换传递给查询本身?

我现在的代码是:http://userscripts.org/scripts/review/58939

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-10-01 11:23:15

您可以简化userscript中的XPath,并使用“|”连接单个表达式:

代码语言:javascript
复制
"//div[@class='reactionsCom reactionsNiv1 first'] | " + 
"//div[@class='googleBanner'] | " + 
"//div[@class='blocE1B-16b'] | " +
"//div[@class='blocE1B-16b clear']"

或者在一个有几个条件的表达式中表现得更好:

代码语言:javascript
复制
"//div[@class='reactionsCom reactionsNiv1 first' or " +
      "@class='googleBanner' or " +
      "@class='blocE1B-16b' or " +
      "@class='blocE1B-16b clear']"

对于上面的示例,iirc第二个查询只有在第一个查询的结果包含它们的情况下才会找到匹配,即如果是//div[@class='class name 2'],其中是来自第一个查询//div[@class='class name 2']的结果节点的子查询。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1502739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档