JS DOM: получить элементы по текстовому содержимому - PullRequest
13 голосов
/ 01 мая 2010

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

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

РЕДАКТИРОВАТЬ: jQuery и mootools, кажется, имеют свои :contains операторы, работающие через обход дерева. Это будет означать, что нет собственного способа поиска на странице, это правильно? Кажется очень неэффективным, если страница огромна, и единственная информация о вашем элементе - это искомая строка. Я не прав?

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

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

Спасибо

Ответы [ 3 ]

21 голосов
/ 05 марта 2012

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

Это пример:

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

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

4 голосов
/ 02 мая 2010

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

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

1 голос
/ 21 октября 2014

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

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

или

//*[.='anytext']
...