我需要的中間插入元素文本節點(用跨度替換一個單詞)。我做到了通過更換完全文本節點:
(使用jQuery的)
function replace_text(element, search, replacement_html){
if(!element) element=document.body;
var nodes=element.childNodes;
for(var n=0;n<nodes.length;n++){
if(nodes[n].nodeType==Node.TEXT_NODE){
if(nodes[n].textContent.match(new RegExp(that.escapeRegExp(search),'gi'))){
var newtextContent=nodes[n].textContent.replace(
new RegExp(escape_regex(search),'gi'), replacement_html);
$(nodes[n]).before(newtextContent).remove();
}
} else {
replace_text(nodes[n], search, replacement_html);
}
}
}
function escape_regex(str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
,然後調用:
$('.highlight_terms_here').each(function(){
replace_text(this,
the_word,
'<span style="background-color: yellow">'+the_word+'</span>');
})
或者乾脆:
replace_text($('#contents')[0], the_word,
'<span style="background-color: yellow">'+the_word+'</span>');
只是爲了說服你, jQuery值得一試...... jQuery(或類似庫)非常簡單:'$('#mydiv')。append('...');'作爲昆汀的回答表明,它與普通的DOM相當多複雜。 –