06.04.2009, 21:32
|
Аспирант
|
|
Регистрация: 01.03.2009
Сообщений: 55
|
|
Поиск выражения в тексте
Есть текст в котором могут присутсвовать ссылки на 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.
http://www.youtube.com/watch?v=iuOcLoqo5e0 |
Вопрос в том как мне "отловить" эти ссылки. Ссылок может быть сколько угодно.
Думал отследить эти ссылки таким способом
jQuery('a[href~=youtube.com/watch?v=]')
Но проблема в том что атрибуда <a> нету у меня , есть просто текст.
Заранее благодарен.
|
|
06.04.2009, 23:17
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
самый простой по логике способ:
получаем сисок всех нод с помощью getElementsByTagName('*')
перебираем их в цикле, а внутри цикла перебираем всех их потомков, являющихкся текстовыми нодами
каждый из них проверяемя на вхождение подстроки, и делаем с ним необходимое действие
меньше десятка строк, и никакого jQuery
на нем, же я не знаю как это реализовать, и есть ли для этого эффективные инструменты
я вроде бы слышал, что jQuery позволяет искать элементы использую XPath-синтаксис.
|
|
07.04.2009, 03:55
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
<!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>
|
|
07.04.2009, 10:54
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Riim,
вы сами пытались запустить этот пример на странице большей, чем ваш тестовый пример? или вы считаете по несколько раз перерисовывать окно это хорошо?
|
|
07.04.2009, 11:05
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Если нужно их только найти то это вероятно лучший способ. Я просто забыл, что их еще и в тег "a" запихнуть надо. Невнимательно вопрос читал.
|
|
07.04.2009, 11:24
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Только вот у текстовых узлов innerHTML-а нету. И как поменять часть такого узла? Вероятно, придется брать его родителя и заменять часть через innerHTML. А этот родитель может тоже много чего содержать, и все это будет перерисовываться. Думаю, если другого способа нет, то лучше это на сервере делать. И ссылки будут рабочие до onload.
Последний раз редактировалось Riim, 07.04.2009 в 11:27.
|
|
07.04.2009, 15:31
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Riim,
во первых, если даже считать, что мы ничего не можем сделать с текстовым узлом, а только с его родителем, это в разы лучше, чем перерисовывать ВЕСЬ документ.
вы-вторых, у текстовых нодов есть замечательное свойство nodeValue, которое доступно для редактирования.
помимо это есть куча замечательных методов типа inserBefore и прочих.
с их помощью много чего можно намутить, и при этом перерисовыватся будет минимум страницы
то есть только для проверки самого факта наличия ваш код подходит, и он быстрее.
для любой модификации в указанном месте, он уже не подходит
|
|
07.04.2009, 15:42
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
>>> во первых, если даже считать, что мы ничего не можем сделать с текстовым узлом, а только с его родителем, это в разы лучше, чем перерисовывать ВЕСЬ документ.
Да я ж не спорю.
>>> для любой модификации в указанном месте, он уже не подходит
Если указанное место это див с текстом и без элементов.
Замечательно подойдет
Последний раз редактировалось Riim, 07.04.2009 в 15:44.
|
|
07.04.2009, 17:24
|
|
Матрос
|
|
Регистрация: 04.04.2008
Сообщений: 6,246
|
|
Сообщение от Riim
|
Если указанное место это див с текстом и без элементов.
Замечательно подойдет
|
ну,у тебя-то берется не указанное место, а весь документ.
во вторых, чисто текстовый див не был оговорен в условии топикстартера, и вообще является ситуацией скорее искуственой, чем реальной
|
|
07.04.2009, 17:28
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Про весь документ я и не спорю, а про указанное место ты сам начал.
|
|
|
|