вот намучил кажется:
function replace_all(str1,str2)
{
regexp=new RegExp(str1,"g")
all_elements=document.getElementsByTagName('*');
for(i=0,s=all_elements.length;i<s;i++)
if(all_elements[i].tagName!="SCRIPT")
for(j=0,s_=all_elements[i].childNodes.length;j<s_;j++)
if(all_elements[i].childNodes[j].nodeType==3)
{
if(regexp.test(all_elements[i].childNodes[j].textContent))
{
all_text=all_elements[i].childNodes[j].textContent
text=all_text.substr(0,all_text.indexOf(str1))
left=document.createTextNode(text)
//оборачиваем найденный текст внутрь тега <B>
middle=document.createElement('b');//ТУТ ставится тег в который мы хотим обернуть.
//text=all_text.substr(all_text.indexOf(str1),str1.length)
middle.appendChild(document.createTextNode(str2))
//-------------------------------------------------------------------------------------------
text=all_text.substring(all_text.indexOf(str1)+str1.length,all_text.length)
right=document.createTextNode(text)
all_elements[i].childNodes[j].textContent=""
all_elements[i].insertBefore(left,all_elements[i].childNodes[j])
all_elements[i].insertBefore(middle,all_elements[i].childNodes[j])
all_elements[i].insertBefore(right,all_elements[i].childNodes[j])
}
}
}
window.onload=function(){
replace_all("AzriMan"," AndryMan ");
}
HTML для тестирования
<html>
<head>
</head>
<body>
qwe<br/>
azriMan<br/>
qwe<br/>
<table border="1">
<tr>
<td>a_AzriMan_x</td><td>AzriMa_n</td>
</tr>
<tr>
<td>AzriM_an</td><td>AzriMa_n</td>
</tr>
</table>b_AzriMan_y<br/>
</body>
</html>
единственный минус, если в пределах одной текстовой ноды несколько совпадений, обрабатывается только первое.
сейчас впадлу переписывать.постарайтесь сами сделать это(например можно в цикл обернуть)
альтернативное, более простое, решение задачи-изменение innerHTML вышестоящего элемента.но при этом страница будет "скакать"
скрипт оформлен подж оборачивание в <b>