Цитата:
Цитата:
1) нужно не только найти ссылки, но и превратить их собственно в ссылки? 2) там где ты будешь ссылки искать - это просто блок текста или текст с разметкой, тэгами? 3) могут встречаться другие ссылки? Или только нужные? Цитата:
Цитата:
|
Цитата:
var TextNode = { each: function(callback, parent) { for (var childNodes = (parent || document.body).childNodes, i = 0; i < childNodes.length; i++) { var I = childNodes[i]; I.nodeType == 1 ? arguments.callee(callback, I) : I.nodeType == 3 && callback(I, i); } } }; window.onload = function() { var callback = function(noda) { if (noda.nodeValue.indexOf('youtube.com') > -1) { var v = noda.nodeValue.replace(arguments.callee.regExp, '<a href="$1">$1</a>'); if (v != noda.nodeValue) { var div = arguments.callee.div; div.innerHTML = v; if (div.firstChild) { var f = arguments.callee.fragment; do f.appendChild(div.firstChild); while (div.firstChild); noda.parentNode.replaceChild(f, noda); } } } }; callback.regExp = /(http\:\/\/www\.youtube\.com\/watch\?v\=[0-9a-z]{11})/gi; callback.div = document.createElement('div'); callback.fragment = document.createDocumentFragment(); TextNode.each(callback); }; Уйти от do-while без появления лишних операций не получается у меня. Цитата:
Разве, что вместо window.onload использовать $.ready . Цитата:
$.ready в Jquery для того и сделан. |
И TextNode.each для любителей if-else:
var TextNode = { each: function(callback, parent) { for (var childNodes = (parent || document.body).childNodes, i = 0; i < childNodes.length; i++) { var I = childNodes[i]; if (I.nodeType == 1) arguments.callee(callback, I); else if (I.nodeType == 3) callback(I, i); } } }; |
Цитата:
Цитата:
|
Цитата:
Цитата:
|
Цитата:
var callback = function(noda) { if (noda.nodeValue.indexOf('youtube.com') > -1) { var v = noda.nodeValue.replace(arguments.callee.regExp, '<a href="$1">$1</a>'); if (v != noda.nodeValue) { var div = arguments.callee.div; div.innerHTML = v; var f = arguments.callee.fragment; while (div.firstChild) f.appendChild(div.firstChild); noda.parentNode.replaceChild(f, noda); } } }; если я не вижу ситуаций, когда (v != noda.nodeValue) && (! div.firstChild), скажи |
Цитата:
|
Цитата:
а та проблема возникла из-за пустых (почти) текстовых узлов |
Цитата:
Значит TextNode.each из постов 82 и 83, и callback из поста 86 считаем окончательными вариантами? |
Только
var div = arguments.callee.div; div.innerHTML = v; var f = arguments.callee.fragment; заменить на: var div = arguments.callee.div, f = arguments.callee.fragment; div.innerHTML = v; |
Цитата:
<div class="storycontent"> текст текст текст http://www.youtube.com/watch?v=iuOcLoqo5e0 текст текст текст </div> А мне надо что бы получалось так : <div class="storycontent"> текст текст текст <a href="http://www.youtube.com/watch?v=iuOcLoqo5e0">смотреть видео</a> текст текст текст </div> Надо было мне это раньше наверно написать !? :) , хотя многим я думаю эта тема поможет :) Но в тексте конечно могут поподаться и другие варианты , как то http://www.blablabla.com,http://www.yoursite.com, но их обрабатывать не надо.Проше говоря ,мне надо чтобы я мог в код javascript добавлять ссылки которые надо найти, может быть Youtube , Google video и т.д. , т.е. может быть чтото типо массива video_array = "http://www.youtube.com,http://youtube.com,http://youtube.ru,http://www.googlevideo.com"; Но это конечно в идеале. Цитата:
Надеюсь понятно написал ..... потому что бывает что бы задать вопрос , надо знать на него ответ :) |
2) там где ты будешь ссылки искать - это просто блок текста или текст с разметкой, тэгами?
|
Цитата:
P.S. Хотя вот тут подумал ..... может и мне будет удобнее и для написания кода ,если я буду использовать такие теги [video]http://www.youtube.com/watch?v=iuOcLoqo5e0[/video] или даже так [youtube]http://www.youtube.com/watch?v=iuOcLoqo5e0[/youtube] , [googlevideo]http://www.googlevideo.com/watch?v=iuOcLoqo5e0[/googlevideo], хотя незнаю упростит это дело или усложнит !??? |
как-то так:
$(function() { var newContent = $('#div_id').text().replace( /http\:\/\/(www\.)?(googlevideo|youtube)\.com\S*/, '<a href="$&">$&</a>' ); $('#div_id').html( newContent ); }) |
Цитата:
P.S. Уже второй раз пытаюсь добавить плюсик x-yuri , но мне пишет , что сначала я должен добавить плюсик кому то еще :) |
Цитата:
|
Цитата:
<div id="story"> <div id="title">Title1</div> <div class="storycontent">text text text text </div> </div> <div id="story"> <div id="title">Title2</div> <div class="storycontent">text2 text2 text2 text2 </div> </div> <div id="story"> <div id="title">Title3</div> <div class="storycontent">text3 text3 text3 text3 </div> </div> и т.д. |
ну ты, наверное, пишешь
$('.storycontent').text().... а что выдает alert( $('.storycontent').text() ); |
Цитата:
Выдает мне text text text text text2 text2 text2 text2 text3 text3 text3 text3 Причём записывает все эти тексты в каждый div. |
значит text возвращает содержимое всех элементов с классом storycontent. А тебе нужно выполнить действия для каждого элемента отдельно, для этого есть функция each
|
Цитата:
|
вобщем сделал с помощью each , вроде всё стало нормально , новости не дублируются , но появилась новая проблема , остальные ссылки в тексте ,перестали быть ссылками , а стали просто текстом :)
|
1) ну покажи тогда код что ли. Или ты просто поделился впечатлениями? :)
2) этот код остальные ссылки "портит"? Т.е. если его закомментировать, то все ок? |
Цитата:
jQuery('.storycontent').each(function(){ var newContent = jQuery(this).text().replace( /http\:\/\/(www\.)?(googlevideo|youtube)\.com\S*/, '<a href="$&">$&</a>' ); jQuery('.storycontent').html( newContent ); }); Да он убирает остальные ссылки и делает их просто текстом . Я уже думаю .... может проще на ПХП сделать ..... :) :) :) |
Цитата:
p.s. jQuery('.storycontent').html( newContent ); неужели работает? O_o |
Часовой пояс GMT +3, время: 13:12. |