| 
	| 
	
	| 
		
	| 
			
			 
			
				10.04.2009, 16:28
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| Парни , спасибо за такое живое обсуждение моего вопроса. Прочитал всё , многое не понял |  
	
   (это я не с тебя, а так, с ситуации)
 
	
 
	| Цитата: |  
	| Так всё-таки можно привести хотя бы 2 варианта кода |  
	
 ну там вообще много было вариантов, только вопросы к тебе есть: 
1) нужно не только найти ссылки, но и превратить их собственно в ссылки? 
2) там где ты будешь ссылки искать - это просто блок текста или текст с разметкой, тэгами? 
3) могут встречаться другие ссылки? Или только нужные?
 
	
 
	| Цитата: |  
	| Так же видел в коде windows.onload , моих знаний не так много и наверно я чето не понимаю , но с этим бывают проблемы |  
	
 могут быть, если у тебя несколько скриптов будут изменять window.onload - только последний будет работать
 
	
 
	| Цитата: |  
	| P.S. Так же хотел спросить насколько просто/сложно , будет изменить код ,если потребуется искать не только по YouTube , но и по Google video и по другим видео.... |  
	
 можно, надо будет регулярное выражение доработать |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 16:44
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от grusha |  
	| Меня меньше интересует размер файла , больше интересует его производительность . |  
	
 Ну тогда так вот:
 
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 без появления лишних операций не получается у меня.
 
	
 
	| Сообщение от grusha |  
	| И если возможно ,то код который бы работал с библиотекой jQuery . |  
	
 Зачем тут Jquery? 
Разве, что вместо window.onload использовать $.ready .
 
	
 
	| Сообщение от grusha |  
	| Так же видел в коде windows.onload , моих знаний не так много и наверно я чето не понимаю , но с этим бывают проблемы. |  
	
 Как и сказал x-yuri проблемы будут когда ты захочешь повесить на windows.onload несколько обработчиков. 
$.ready в Jquery для того и сделан.
			
			
	
			
			
			
			
			
				  |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 16:46
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| И 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);
		}
	}
};
 |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 17:07
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| Уйти от do-while без появления лишних операций не получается у меня |  
	
 так ведь если v != noda.nodeValue, то div.firstChild == true автоматически, т.е. ты это условие можешь просто убрать и заменить do-while -> while
 
	
 
	| Цитата: |  
	| И TextNode.each для любителей if-else |  
	
 я бы все равно не так написал   |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 17:27
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от x-yuri |  
	| так ведь если v != noda.nodeValue, то div.firstChild == true автоматически, т.е. ты это условие можешь просто убрать и заменить do-while -> while |  
	
 А "var f = arguments.callee.fragment;" внутри while писать? Нет. А значит в некоторых случаях эта (и не только) строка сработает зря.
 
	
 
	| Сообщение от x-yuri |  
	| я бы все равно не так написал |  
	
 grusha попросил несколько вариантов. Предлагай свой. |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 18:02
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| А "var f = arguments.callee.fragment;" внутри while писать? Нет. А значит в некоторых случаях эта (и не только) строка сработает зря. |  
	
 я имел в виду так:
 
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), скажи |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 18:12
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от x-yuri |  
	| если я не вижу ситуаций, когда (v != noda.nodeValue) && (! div.firstChild), скажи |  
	
 Когда в innerHTML записываются табы форматирования. Ты же сам указывал на эту ситуацию. Пост №24. |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 18:16
			
			
			
		 |  
	| 
		
			|  | 
       |  | 
					Регистрация: 27.12.2008 
						Сообщений: 4,201
					 
		
 |  |  
	| 
	
 
	| Цитата: |  
	| Когда в innerHTML записываются табы форматирования. Ты же сам указывал на эту ситуацию. Пост №24 |  
	
 так ведь v != noda.nodeValue, т.е. в текстовом узле была ссылка, значит во-первых текстовый узел не пустой, а во-вторых там вообще ссылка (тэг) уже есть (после replace) 
а та проблема возникла из-за пустых (почти) текстовых узлов |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 18:23
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| 
	
 
	| Сообщение от x-yuri |  
	| так у ведь v != noda.nodeValue, т.е. в текстовом узле была ссылка |  
	
 И правда. Башка ночью совсем не варит.
 
Значит TextNode.each из постов 82 и 83, и callback из поста 86 считаем окончательными вариантами? |  |  
	| 
		
	| 
			
			 
			
				10.04.2009, 18:52
			
			
			
		 |  
	| 
		
			|  | Рассеянный профессор       |  | 
					Регистрация: 06.04.2009 
						Сообщений: 2,379
					 
		
 |  |  
	| Только 
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;
 |  |  |  |