+ JavaScript の質問用スレッド vol.72 +

このエントリーをはてなブックマークに追加
419Name_Not_Found
>>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;
}
420Name_Not_Found:2009/08/14(金) 11:33:25 ID:???
使い方
getTextNodes(document).forEach(function(node){
replaceTextNodeWithHtml(node, /(a)/g, '<b>$1</b>');
});