Всем дня.
Задача следующая. Имеются блоки комментариев, по ним пробегается цикл на jQ и парсит текст, вставляя при этом вместо текстовых смайлов - графические, вместо линков на видео - соотв.видео плееры...
Все это дело было найдено на чистой яве, но поскольку для прочего функционала и плюшек было решено прикрутить именно jQ, задача встала в переписании сего функционала под фреймворк.
Не вкурю как что-то подобное перевести на jQ ?
function smile() {
var map = [
['angel', /O:-\)/gi],
['smile', /:-\)/gi]
]
function xform(s) {
//s = s.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">")
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++) {
}
});
});