|
Поиск выражения в тексте
Есть текст в котором могут присутсвовать ссылки на 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, время: 11:25. |
|