我正在做一堆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
感谢您的帮助!
答案 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']