Цитата:
Цитата:
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, время: 02:38. |