Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.03.2009, 22:36
Dan T
 
Сообщений: n/a

Замена слов в тексте
Приветствую,
два дня бьюсь - не могу решить такую задачу:
Есть список слов:
kayword1,keyword2,keyword3
как по окончанию загрузки страницы - заменить в ней все слова из списка(первые N раз) на super_keyword1,super_keyword2 и super_keyword3 соответственно.
Вожусь с var.replace и регулярками,но
основные проблемы две - как заменять слова только в тексте,а не в тегах, т.к. иногда слово display попадается в том же css и такая замена полностью рушит структуру страницы
и как почему-то при замене страничка моргает(хотя может ето именно следствие нарушения ее структуры из-за замены в тегах)
Если кто-то сталкивался с подобной задачей - подскажите плз решением.
Спасибо
Ответить с цитированием
  #2 (permalink)  
Старый 13.03.2009, 23:19
Аватар для Treekci
Интересующийся
Отправить личное сообщение для Treekci Посмотреть профиль Найти все сообщения от Treekci
 
Регистрация: 11.03.2009
Сообщений: 27

Читали данный топик? Замена слова посредством Java-script
Ответить с цитированием
  #3 (permalink)  
Старый 13.03.2009, 23:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

юзайте поиск получше, прежде чем плодить темы
внизу вашей темы есть список "Похожие темы"
там есть эта тема
там мною выложен код, и в него даже можно добавлять теги-исключения.
и он не заставляет страницу мигать
Ответить с цитированием
  #4 (permalink)  
Старый 14.03.2009, 00:01
Dan T
 
Сообщений: n/a

Конечно читал Перед тем как написать довольно долго искал ответ в сети....
При помощи решения, казанного в данном топике (именно вариант через DOM) у меня не получается заменить keyword1 на <b>keyword1</b> или на <a href="">keyword1</a>
т.е. замена происходит так, что теги считаются как текст. И попросту выделить определенный слова жирным не получается :-(
Если подскажете как оптимизировать то решение под эти нужды - было бы здорово.
Спасибо!
Ответить с цитированием
  #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>
Ответить с цитированием
  #6 (permalink)  
Старый 14.03.2009, 01:09
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

Блин.
пришло еще одно решение попроще и поуниверсальней.
генерим временный элемент.
его innerHTML элементарными текстовыми заменами заменами присваиваем все что надо.
затем чистим исходный текстовый нод в документе, и преед ним по очереди аттачим ноды временного элемента.

короче, я сказал несоклько вараинтов и код.пробуйте, творите дальше
Ответить с цитированием
  #7 (permalink)  
Старый 18.03.2009, 11:31
Dan T
 
Сообщений: n/a

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:-(
Ответить с цитированием
  #8 (permalink)  
Старый 18.03.2009, 12:21
Аватар для Gvozd
Матрос
Отправить личное сообщение для Gvozd Посмотреть профиль Найти все сообщения от Gvozd
 
Регистрация: 04.04.2008
Сообщений: 6,246

http://translit.ru вам в помощь.
Сообщение от Dan T
при исползовании кода на больших страницах происходит перемешивания текста:-(
к примеру при замене слова "objects" фраза:
In addition to the built-in JavaScript objects, you can also access and manipulate all of the HTML DOM objects with JavaScript.
превращается в:
, you can also access and manipulate all of the HTML DOM objects with JavaScript. objects In addition to the built-in JavaScript

и так далее :-( иногда ето вообше срезает часть предложения:-(
На страничках с очен простой структурой - код работает, а если ето обычная страница - то не работает :-(
Пробовал на етой странице:
http://www.w3schools.com/js/js_obj_htmldom.asp
Просто сохранил ее на HDD, вставил скрипт замены и запустил в браузере.
два дня игрался - так и не смог починить :-( может подскажете как поправить код, что б он отрабатывал корректно? (мои знания ДОМ не настолько силны)
спасибо большое!
ПС: простите за транслит - нет русской клавиатури сей4ас:-(

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

я же говорил, что:
Сообщение от Gvozd
единственный минус, если в пределах одной текстовой ноды несколько совпадений, обрабатывается только первое.
на самом деле, у меня бащка ужде не варила, и я немного неугадал с глюком.но то что он будет я знал
Сообщение от Dan T
знания ДОМ не настолько силны)
у меня сильны можно подумать?
я сидел с кучей справок и матерился по поводу некросбраузерности некоторых DOM-методов, что весьма усложняло код

Сообщение от Dan T
может подскажете как поправить код, что б он отрабатывал корректно?
да.
берете текстовую ноду, и обрабатываете все вхождения подстроки.
лучше всего регекспами обработать, разбив строку на куски, и склеив обратно уже силами DOM. обрабатывать все вхождения, а не как я в первый раз халтурить.

в формате форума я вам помог.
дал ссылки.
дал совет
дал код(я редко это делаю.просто задача интересная была)
так, что если вы не хотите/не можете сделать это сами, то дальше я смогу только в формате раздела "работа" вам помочь
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена значений ячеек таблицы. madgals Events/DOM/Window 53 13.04.2020 12:14
Замена слова посредством Java-script Assassin Общие вопросы Javascript 33 11.11.2014 22:23
Замена выделенного текста alexKniaz Общие вопросы Javascript 0 27.10.2008 23:25
добавление окошка в скрипт подсчета слов Гость Общие вопросы Javascript 10 11.03.2008 17:07
Замена маркера в поле password Esciloner (X)HTML/CSS 1 07.07.2007 14:12