合并来自document.evaluate的XPathResults

时间:2009-10-01 08:52:06

标签: javascript greasemonkey document.evaluate

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

因为我在每个循环内做同样的事情(thisDiv.parentNode.removeChild)我想做一个循环。

我读过:

  

第五个参数可用于   合并两个XPath的结果   查询。通过一个结果   之前调用document.evaluate,   它会返回组合   两个查询的结果

所以我试过了:

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

您可以在用户脚本中简化XPath并使用“|”加入单个表达式:

"//div[@class='reactionsCom reactionsNiv1 first'] | " + 
"//div[@class='googleBanner'] | " + 
"//div[@class='blocE1B-16b'] | " +
"//div[@class='blocE1B-16b clear']"
在pverel条件下的一个表达式中

甚至更好:

"//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']