2

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

因为我在每个循环 (a 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

谢谢你的帮助 !

4

1 回答 1

1

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

"//div[@class='reactionsCom reactionsNiv1 first'] | " + 
"//div[@class='googleBanner'] | " + 
"//div[@class='blocE1B-16b'] | " +
"//div[@class='blocE1B-16b clear']"

甚至在一个具有严重条件的表达式中更好:

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

于 2009-10-01T11:23:15.033 回答