Замена слов в тексте
Приветствую,
два дня бьюсь - не могу решить такую задачу: Есть список слов: kayword1,keyword2,keyword3 как по окончанию загрузки страницы - заменить в ней все слова из списка(первые N раз) на super_keyword1,super_keyword2 и super_keyword3 соответственно. Вожусь с var.replace и регулярками,но основные проблемы две - как заменять слова только в тексте,а не в тегах, т.к. иногда слово display попадается в том же css и такая замена полностью рушит структуру страницы и как почему-то при замене страничка моргает(хотя может ето именно следствие нарушения ее структуры из-за замены в тегах) Если кто-то сталкивался с подобной задачей - подскажите плз решением. Спасибо |
Читали данный топик? http://javascript.ru/forum/misc/2946...va-script.html
|
юзайте поиск получше, прежде чем плодить темы
внизу вашей темы есть список "Похожие темы" там есть эта тема там мною выложен код, и в него даже можно добавлять теги-исключения. и он не заставляет страницу мигать |
Конечно читал :) Перед тем как написать довольно долго искал ответ в сети....
При помощи решения, казанного в данном топике (именно вариант через DOM) у меня не получается заменить keyword1 на <b>keyword1</b> или на <a href="">keyword1</a> т.е. замена происходит так, что теги считаются как текст. И попросту выделить определенный слова жирным не получается :-( Если подскажете как оптимизировать то решение под эти нужды - было бы здорово. Спасибо! |
вот намучил кажется:
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> |
Блин.
пришло еще одно решение попроще и поуниверсальней. генерим временный элемент. его innerHTML элементарными текстовыми заменами заменами присваиваем все что надо. затем чистим исходный текстовый нод в документе, и преед ним по очереди аттачим ноды временного элемента. короче, я сказал несоклько вараинтов и код.пробуйте, творите дальше |
pri ispolzovanii koda na bolshih stranicah proishodit peremeshivanija teksta:-(
k primeru pri zamene slova "objects" fraza: In addition to the built-in JavaScript objects, you can also access and manipulate all of the HTML DOM objects with JavaScript. prevrashaetsa v: , you can also access and manipulate all of the HTML DOM objects with JavaScript. objects In addition to the built-in JavaScript i tak dalee :-( inogda eto voobshe srezaet 4ast predlogenija:-( N strani4kah s o4en prostoj strukturoj - kod rabotaet, a esli eto obi4naja stranica - to ne rabotaet :-( Proboval na etoj styranice: http://www.w3schools.com/js/js_obj_htmldom.asp Prosto sohranil ee na HDD, vstavil script zameni i zapustil v browsere. dva dnja igralsja - tak i ne smog po4enit :-( moget podskagete kak popravit kod, 4to b on otrabatival korrektno? (moi znanija DOM ne nastolko silni) spasibo bolshoe! PS: prostite za translit - net russkoj klaviaturi sej4as:-( |
http://translit.ru вам в помощь.
Цитата:
|
я же говорил, что:
Цитата:
Цитата:
я сидел с кучей справок и матерился по поводу некросбраузерности некоторых DOM-методов, что весьма усложняло код Цитата:
берете текстовую ноду, и обрабатываете все вхождения подстроки. лучше всего регекспами обработать, разбив строку на куски, и склеив обратно уже силами DOM. обрабатывать все вхождения, а не как я в первый раз халтурить. в формате форума я вам помог. дал ссылки. дал совет дал код(я редко это делаю.просто задача интересная была) так, что если вы не хотите/не можете сделать это сами, то дальше я смогу только в формате раздела "работа" вам помочь |
| Часовой пояс GMT +3, время: 05:31. |