. , , , , . + DOM + .
function replaceText(element, pattern, syn_text) {
for (var childi = 0; childi < element.childNodes.length;childi++) {
var child= element2.childNodes[childi];
if (child.nodeType==1 && child.className!=syn_text){
replaceText(child, pattern, syn_text);
}
else if (child.nodeType==3){
var str = child.data;
str = str.replace(pattern,function(s, p1,p2,p3) {
var parentNode = child.parentNode;
do_replace(s, p1,p2,p3,parentNode,pattern,syn_text);
parentNode.removeChild(child);
});
}
}}
function do_replace(s, p1,p2,p3,parentNode,pattern,syn_text) {
if(p1.length>0){
var text_node = document.createTextNode(p1);
parentNode.appendChild(text_node);
}
if(p2.length > 0){
spanTag = document.createElement("span");
spanTag.id = "SString" + id++;
spanTag.className = syn_text;
spanTag.innerHTML = p2;
parentNode.appendChild(spanTag);
}
if(p3.length > 0){
if(pattern.test(p3)){
p3.replace(pattern,function(s, p1,p2,p3) {
do_replace(s, p1,p2,p3,parentNode,pattern);
return;
});
}
else{
var text_nodep3 = document.createTextNode(p3);
parentNode.appendChild(text_nodep3);
return;
}
}
else{
return;
}
return}
:
syn_highlight = "highlight_me";
pattern = new RegExp('([\\w\\W]*?)\\b('+ searchTerm + '[\\w]*)\\b([\\w\\W]*)',"ig");
replaceText($('#BodyContent')[0],pattern,syn_highlight);