Показать сообщение отдельно
  #5 (permalink)  
Старый 14.03.2009, 01:06
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

вот намучил кажется:
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>
Ответить с цитированием