Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.02.2010, 09:35
Новичок на форуме
Отправить личное сообщение для Nitrogen Посмотреть профиль Найти все сообщения от Nitrogen
 
Регистрация: 17.02.2010
Сообщений: 6

Парсилка текста на jQ
Всем дня.

Задача следующая. Имеются блоки комментариев, по ним пробегается цикл на jQ и парсит текст, вставляя при этом вместо текстовых смайлов - графические, вместо линков на видео - соотв.видео плееры...

Все это дело было найдено на чистой яве, но поскольку для прочего функционала и плюшек было решено прикрутить именно jQ, задача встала в переписании сего функционала под фреймворк.

Не вкурю как что-то подобное перевести на jQ ?

function smile() {
	var map = [
				['angel',	/O:-\)/gi],
				['smile',	/:-\)/gi]
				
				
	]
	function xform(s) { 
		//s = s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
		for (var i = 0; i < map.length; i++) s = s.replace(map[i][1], '<img style="border:0px;" src="' + webPath +  '/images/smiles/' + map[i][0] +'.gif">')
		return s;
	}
	function smilize_node(text_node, p) {
		var s = text_node.data;
		var parent = p;
		if (!p) parent = text_node.parentNode;
		if (s.match(/\.write/)) {
			return;
		} try {
			var new_node = document.createElement("span");
			var new_content = xform(s);
			if (new_content != s) {
				new_node.innerHTML = new_content;
				parent.replaceChild(new_node, text_node);
			}
		}catch(e) {}
	}
	if (document.evaluate) { 
		var textnodes = document.evaluate( "//body//text()", document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 
		for (var i = 0; i < textnodes.snapshotLength; i++) { 
			node = textnodes.snapshotItem(i); 
			smilize_node(node, null);
		}
	} else {
		function processNode(node, parent) {
			if (node.nodeType == 3) {
				smilize_node(node, parent);
			} else if (node.nodeType == 1) {
				var i;                   
				for (i = 0; i < node.childNodes.length; i++) {
					processNode(node.childNodes[i], node);
				}
			}
		}
		processNode(document.body, document.body);
	}
}


Вот начальный кусок обработчика уже на jQЖ

$(document).ready (function() {
	var smiles = [
		['angel',	/O:-\)/gi],
		['smile',	/:-\)/gi]
	];
	$('div.comment').each(function() {
		// Smiles
		var message = $(this).text();
		for (var i = 0; i < smiles.length; i++) {



		}
	});
});
Ответить с цитированием
  #2 (permalink)  
Старый 17.02.2010, 09:43
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

Тема скорее для раздела работа. Либо задавайте конкретные вопросы.
Ответить с цитированием
  #3 (permalink)  
Старый 17.02.2010, 09:49
Новичок на форуме
Отправить личное сообщение для Nitrogen Посмотреть профиль Найти все сообщения от Nitrogen
 
Регистрация: 17.02.2010
Сообщений: 6

Конкретный вопрос "КАК удалить родительский элемент и на его место вставить другой (т.е. заменить =) на граф смаил по месту...) ?
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2010, 10:06
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 09.07.2008
Сообщений: 3,873

http://api.jquery.com/replaceWith/
http://jquery-docs.ru/Manipulation/replaceWith/
Ответить с цитированием
  #5 (permalink)  
Старый 17.02.2010, 11:51
Новичок на форуме
Отправить личное сообщение для Nitrogen Посмотреть профиль Найти все сообщения от Nitrogen
 
Регистрация: 17.02.2010
Сообщений: 6

... вот только replaceWith() тут не подойдет, когда в едином блоке (например пусть будет div ) присутствует куча текста и надо пройтись по всему этому тексту и реплейснуть определенные фрагменты...
Ответить с цитированием
  #6 (permalink)  
Старый 17.02.2010, 15:16
Новичок на форуме
Отправить личное сообщение для Nitrogen Посмотреть профиль Найти все сообщения от Nitrogen
 
Регистрация: 17.02.2010
Сообщений: 6

короче решил так:

...
		for (var i = 0; i < smiles.length; i++) {
			$(this).html($(this).html().replace(smiles[i][1],'<img src="' + webPath +  '/images/smiles/' + smiles[i][0] +'.gif">'));
		}
...


... спасибо всем за помощь !
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2010, 17:34
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

Сообщение от Nitrogen
.. спасибо всем за помощь !
А теперь представь работоспособность этого? как только происходит parent.innerHTML=... сразу у всех элементов внутри parent пропадают все обработчики событий....
__________________
Настоящий программист думает и осознает сам решение задачи, а не копирует другие мысли, не осознавая их (c)
Относись к человеку так же, как хотелось бы отношения к себе (с)
Все нужно там, где оно нужно, а все не нужно нигде (с) Gozar
B~Vladi: А кто такой JavaScript стрелок?! micscr: это тот, кто не jQuery танкист.
Программы становятся медленнее быстрее, чем компьютеры становятся быстрее (с) Никлаус Вирт
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Контроль ввода текста в форму Derack Events/DOM/Window 11 09.01.2011 00:07
Вопрос по выводу текста в тело HTML-документа средствами JavaScript AlexPh Я не знаю javascript 2 31.05.2009 01:46
Как сделать чтобы text() брал только текст родителя без текста вложенных контейнеров? Andrey32 jQuery 3 23.05.2009 00:33
Оборачивание текста в теги <b>, <i> и т.д. bizmak Элементы интерфейса 4 23.01.2009 04:01
Firefox: перехватить соббытие при перетаскивании текста no_alex Общие вопросы Javascript 9 21.08.2008 17:02