JS DOM: получение элементов по текстовому контенту

Я ищу способ выполнения полнотекстового поиска на дереве DOM с помощью JS. В двух словах я хотел бы получить список текстовых узлов, которые содержат заданную строку.

Я пробовал mootools Element.getElements ( ':contains[string]' ), но я не могу заставить его работать со строками, содержащими пробелы.

EDIT: jQuery и mootools, похоже, работают с операторами :contains через обход дерева. Это означало бы, что нет никакого родного способа поиска страницы, это правильно? Кажется очень неэффективным, если страница огромна, и единственная информация, которую вы имеете о своем элементе, - это искомая строка. Я не прав?

Я собираюсь проиндексировать все текстовые узлы и проверять индекс для каждой искомой строки, но в моем проекте нет способа сообщить, когда обновления DOM будут поддерживать такой индекс, дата.

Любые лучшие идеи?

Спасибо

Ответ 1

Если у вас есть современный браузер, вы всегда можете использовать XPATH, так как он имеет контентный поиск.

Это пример:

document.evaluate('//*[text()="' + string + '"]', document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE).snapshotItem(0);

И с более старыми браузерами вы можете закрепить XPATH с помощью чего-то вроде http://llamalab.com/js/xpath/

Ответ 3

В общем DOM: для получения элемента по тексту в DOM

//*[text()='anytext']

или

//*[.='anytext']