|
Поиск выражения в тексте
Есть текст в котором могут присутсвовать ссылки на YouTube , в таком формате http://www.youtube.com/watch?v=iuOcLoqo5e0 вот пример текста
Код:
Google points to voice search as vital to the company's endeavours in building a presence on the mobile web. Думал отследить эти ссылки таким способом jQuery('a[href~=youtube.com/watch?v=]') Но проблема в том что атрибуда <a> нету у меня , есть просто текст. Заранее благодарен. |
самый простой по логике способ:
получаем сисок всех нод с помощью getElementsByTagName('*') перебираем их в цикле, а внутри цикла перебираем всех их потомков, являющихкся текстовыми нодами каждый из них проверяемя на вхождение подстроки, и делаем с ним необходимое действие меньше десятка строк, и никакого jQuery на нем, же я не знаю как это реализовать, и есть ли для этого эффективные инструменты я вроде бы слышал, что jQuery позволяет искать элементы использую XPath-синтаксис. |
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>blank</title> <script type="text/javascript" src="scripts/base.debug.js"></script> <script type="text/javascript"> window.onload = function() { var arr = document.body.innerHTML.match(/http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11}/gi); alert( arr.join('\n') ); }; </script> </head> <body> Google points to voice search as vital to the company's endeavours in building a presence on the mobile web. http://www.youtube.com/watch?v=iuOcLFFo5e1 fgfdgfd fghgfh fdgfdgfd dfsd http://www.youtube.com/watch?v=iuOcLoqo5e0 dsfs dsfds </body> </html> |
Riim,
вы сами пытались запустить этот пример на странице большей, чем ваш тестовый пример? или вы считаете по несколько раз перерисовывать окно это хорошо? |
Если нужно их только найти то это вероятно лучший способ. Я просто забыл, что их еще и в тег "a" запихнуть надо. Невнимательно вопрос читал.
|
Только вот у текстовых узлов innerHTML-а нету. И как поменять часть такого узла? Вероятно, придется брать его родителя и заменять часть через innerHTML. А этот родитель может тоже много чего содержать, и все это будет перерисовываться. Думаю, если другого способа нет, то лучше это на сервере делать. И ссылки будут рабочие до onload.
|
Riim,
во первых, если даже считать, что мы ничего не можем сделать с текстовым узлом, а только с его родителем, это в разы лучше, чем перерисовывать ВЕСЬ документ. вы-вторых, у текстовых нодов есть замечательное свойство nodeValue, которое доступно для редактирования. помимо это есть куча замечательных методов типа inserBefore и прочих. с их помощью много чего можно намутить, и при этом перерисовыватся будет минимум страницы то есть только для проверки самого факта наличия ваш код подходит, и он быстрее. для любой модификации в указанном месте, он уже не подходит |
>>> во первых, если даже считать, что мы ничего не можем сделать с текстовым узлом, а только с его родителем, это в разы лучше, чем перерисовывать ВЕСЬ документ.
Да я ж не спорю. >>> для любой модификации в указанном месте, он уже не подходит Если указанное место это див с текстом и без элементов. Замечательно подойдет |
Цитата:
во вторых, чисто текстовый див не был оговорен в условии топикстартера, и вообще является ситуацией скорее искуственой, чем реальной |
Про весь документ я и не спорю, а про указанное место ты сам начал.
|
Часовой пояс GMT +3, время: 09:08. |
|