私の元の答えは間違っていました(コメントで指摘されているように:))正しい解決策を含めるようにこの回答を編集しました。
var rgx = /Podunk/g;
$("body *")
.contents()
.filter(function() {
if (this.nodeType !== 3){
return false;
}
return true;
})
.each(function(){
var $this = $(this);
var txt = $this.text();
if (rgx.test(txt)){
$this.replaceWith("<span>" + txt.replace(rgx,"<span class='podunk'>Podunk</span>") + "</span>");
};
});
これには、Podunk のみを含む要素と追加の span 要素を取得するという欠点があります。つまり、あなたが持っている場合
<a>Podunk</a>
あなたはで終わる
<a><span><span class="podunk">Podunk</span></span>.
これは少し考えれば克服できると思います。