Слияние XPathResults из document.evaluate
Я делаю кучу документов. Оцениваю, затем перебираю каждый результат с циклом for на result.snapshotLength
,
Так как я делаю то же самое внутри каждого цикла (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 ответ
Вы можете упростить свой 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']
,