Я пытаюсь использовать document.evaluate
, чтобы найти текстовые узлы, соответствующие моему запросу. Проблема, которую я обнаружил, заключается в том, что с использованием XPath, который я использую, он не находит текстовые узлы, которые следуют за другим элементом. Например, с учетом этих условий (jsFiddle):Найти текстовый узел после узла с XPath
HTML
<div><p>$100</p></div>
<p>Test test <span>test</span> $100 test</p>
Мусор
var item,
indx = 0,
items = document.evaluate('//*[contains(text(),"$")]', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
while (item = items.snapshotItem(indx++)) {
if (item.nodeName !== 'SCRIPT') {
console.log(item.textContent);
}
}
этот XPath находит только первый $
, второй не найден из-за <span>
в средний.
Итак, мой вопрос в том, как изменить javascript (а не HTML), чтобы найти оба совпадения?
Я пробовал это изменение в скрипте, которую я поделил, и я вижу эту ошибку: 'недействительное выражение XPath' – Mottie
Я пробовал' '* [содержит (.," $ ")] '' И что нашел оба элемента *, но * если вы используете 'document', он возвращает элемент' html', а переключение на 'document.body' возвращает внешнюю оболочку, что не является оптимальным. – Mottie
Извините, я забыл закрытие ']', теперь отредактированное и исправленное. –