>>409 誤爆(?)先に回答書いた者だけどタグを使いたいというのを見落としてた。あれではテキストしか入れられないからダメ。
修正版↓
function replaceTextNodeWithHtml(textNode, regExp, repHtml){
if(regExp.test(textNode.nodeValue)){
var box = document.createElement('div');
box.innerHTML = textNode.nodeValue.replace(regExp, repHtml);
var newNode = document.createDocumentFragment();
for(var i = 0; i < box.childNodes.length; i++) newNode.appendChild(box.childNodes[i].cloneNode(true));
textNode.parentNode.replaceChild(newNode, textNode);
}
}
function getTextNodes(node){
var result = [];
var nodes = document.evaluate('.//text()', node, null, 7, null);
for(var i = 0; i < nodes.snapshotLength; i++) result.push(nodes.snapshotItem(i));
return result;
}