Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Парсилка текста на jQ (https://javascript.ru/forum/jquery/7736-parsilka-teksta-na-jq.html)

Nitrogen 17.02.2010 10:35

Парсилка текста на 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++) {



		}
	});
});

Octane 17.02.2010 10:43

Тема скорее для раздела работа. Либо задавайте конкретные вопросы.

Nitrogen 17.02.2010 10:49

Конкретный вопрос "КАК удалить родительский элемент и на его место вставить другой (т.е. заменить =) на граф смаил по месту...) ?

Octane 17.02.2010 11:06

http://api.jquery.com/replaceWith/
http://jquery-docs.ru/Manipulation/replaceWith/

Nitrogen 17.02.2010 12:51

... вот только replaceWith() тут не подойдет, когда в едином блоке (например пусть будет div ) присутствует куча текста и надо пройтись по всему этому тексту и реплейснуть определенные фрагменты...

Nitrogen 17.02.2010 16:16

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

...
		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">'));
		}
...


... спасибо всем за помощь !

PeaceCoder 17.02.2010 18:34

Цитата:

Сообщение от Nitrogen
.. спасибо всем за помощь !

А теперь представь работоспособность этого? как только происходит parent.innerHTML=... сразу у всех элементов внутри parent пропадают все обработчики событий....


Часовой пояс GMT +3, время: 21:46.