我正在做一堆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
谢谢你的帮助!
发布于 2009-10-01 11:23:15
您可以简化userscript中的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']的结果节点的子查询。
https://stackoverflow.com/questions/1502739
复制相似问题