Замена слов в тексте
Приветствую,
два дня бьюсь - не могу решить такую задачу: Есть список слов: 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, время: 12:15. |