質問失礼します。

任意のサイト上でテキストの部分だけを置換したいです。

しかし、document.body.innerHTMLで置換しようとすると問題ありです。
たとえば、"a"という文字列を<b></b>で囲もうとすると
document.body.innerHTML=document.body.innerHTML.replace(/(a)/g, "<b>$1</b>");

■置換前
<a href="yahoo.co.jp">a</a>
■期待する動作
<a href="yahoo.co.jp"><b>a</b></a>
■実際の動作
<<b>a</b> href="y<b>a</b>hoo.co.jp"><b>a</b></<b>a</b>>

となってしまいます。

ノードで辿っていくとかいろいろやったのですが、
やるたんびに新たな問題が出てきます。

Trixie(IE)およびSeaHorse(Sleipnir)なら
createtextrange関数とexecCommand関数で簡単にできるのですが、
GreaseMonkey(Firefox)では簡単な方法は無いのでしょうか?

よろしくお願いします。