Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.04.2009, 21:32
Аспирант
Отправить личное сообщение для grusha Посмотреть профиль Найти все сообщения от grusha
 
Регистрация: 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> нету у меня , есть просто текст.

Заранее благодарен.
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2009, 23:17
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

самый простой по логике способ:
получаем сисок всех нод с помощью getElementsByTagName('*')
перебираем их в цикле, а внутри цикла перебираем всех их потомков, являющихкся текстовыми нодами
каждый из них проверяемя на вхождение подстроки, и делаем с ним необходимое действие
меньше десятка строк, и никакого jQuery
на нем, же я не знаю как это реализовать, и есть ли для этого эффективные инструменты
я вроде бы слышал, что jQuery позволяет искать элементы использую XPath-синтаксис.
Ответить с цитированием
  #3 (permalink)  
Старый 07.04.2009, 03:55
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 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>
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2009, 10:54
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

Riim,
вы сами пытались запустить этот пример на странице большей, чем ваш тестовый пример? или вы считаете по несколько раз перерисовывать окно это хорошо?
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2009, 11:05
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Если нужно их только найти то это вероятно лучший способ. Я просто забыл, что их еще и в тег "a" запихнуть надо. Невнимательно вопрос читал.
Ответить с цитированием
  #6 (permalink)  
Старый 07.04.2009, 11:24
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Только вот у текстовых узлов innerHTML-а нету. И как поменять часть такого узла? Вероятно, придется брать его родителя и заменять часть через innerHTML. А этот родитель может тоже много чего содержать, и все это будет перерисовываться. Думаю, если другого способа нет, то лучше это на сервере делать. И ссылки будут рабочие до onload.

Последний раз редактировалось Riim, 07.04.2009 в 11:27.
Ответить с цитированием
  #7 (permalink)  
Старый 07.04.2009, 15:31
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

Riim,
во первых, если даже считать, что мы ничего не можем сделать с текстовым узлом, а только с его родителем, это в разы лучше, чем перерисовывать ВЕСЬ документ.
вы-вторых, у текстовых нодов есть замечательное свойство nodeValue, которое доступно для редактирования.
помимо это есть куча замечательных методов типа inserBefore и прочих.
с их помощью много чего можно намутить, и при этом перерисовыватся будет минимум страницы
то есть только для проверки самого факта наличия ваш код подходит, и он быстрее.
для любой модификации в указанном месте, он уже не подходит
Ответить с цитированием
  #8 (permalink)  
Старый 07.04.2009, 15:42
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

>>> во первых, если даже считать, что мы ничего не можем сделать с текстовым узлом, а только с его родителем, это в разы лучше, чем перерисовывать ВЕСЬ документ.

Да я ж не спорю.

>>> для любой модификации в указанном месте, он уже не подходит

Если указанное место это див с текстом и без элементов.
Замечательно подойдет

Последний раз редактировалось Riim, 07.04.2009 в 15:44.
Ответить с цитированием
  #9 (permalink)  
Старый 07.04.2009, 17:24
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,245

Сообщение от Riim
Если указанное место это див с текстом и без элементов.
Замечательно подойдет
ну,у тебя-то берется не указанное место, а весь документ.
во вторых, чисто текстовый див не был оговорен в условии топикстартера, и вообще является ситуацией скорее искуственой, чем реальной
Ответить с цитированием
  #10 (permalink)  
Старый 07.04.2009, 17:28
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Про весь документ я и не спорю, а про указанное место ты сам начал.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в строке другой подстроки средствами JS YAN Общие вопросы Javascript 13 23.07.2013 09:41
Поиск на странице no_name jQuery 4 07.09.2010 13:26
построение XPath выражения endryha Общие вопросы Javascript 5 11.03.2009 17:00
Для чего ограничен поиск? ZoNT Сайт Javascript.ru 4 01.10.2008 15:55
Поиск в массиве через JavaScript Noran Общие вопросы Javascript 0 10.08.2008 17:31