JS DOM: получить элементы по текстовому содержимому

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

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

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

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

Есть идеи получше?

Спасибо


person Hristo    schedule 01.05.2010    source источник


Ответы (3)


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

Вот пример:

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

А в старых браузерах вы можете заменить XPATH чем-то вроде http://llamalab.com/js/xpath/< /а>

person blerik    schedule 04.03.2012

Решит ли проблему селектор «содержит» из jquery?

http://api.jquery.com/contains-selector/

person Nikita Rybak    schedule 02.05.2010

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

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

or

//*[.='anytext']
person Adnan Ghaffar    schedule 21.10.2014