Цитата:
Цитата:
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; |
Часовой пояс GMT +3, время: 18:30. |