Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.08.2012, 16:58
Аватар для z700i
Аспирант
Отправить личное сообщение для z700i Посмотреть профиль Найти все сообщения от z700i
 
Регистрация: 15.10.2010
Сообщений: 77

Как произвести замену корректно?
Как заменить некоторые слова на странице на HTML-элемент при учёте того что эти слова также встречаются и в коде
Пример:
<div title="some text qwe some text">some text qwe some text</div>

Если заменять просто через replace:
document.body.innerHTML = document.body.innerHTML.replace(/qwe/g,'<img src="rty.png" \/>');

То получается вот такая каша:
<div title="some text <img src="rty.png" /> some text">some text <img src="rty.png" \/> some text</div>

А если же менять не innerHTML, а innerText:
document.body.innerText = document.body.innerText.replace(/qwe/g,'<img src="rty.png" \/>');

То портится не только часть с заменой, а весь документ
Ответить с цитированием
  #2 (permalink)  
Старый 30.08.2012, 18:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Как сказал бы Тёма: так
document.body.innerHTML = document.body.innerHTML ...
делают только мудаки.

Вариантов есть пара в зависимости от конкретной задачи, но скорее всего сама задача кривая.
1. Перебор элементов и замена в текстовых нодах.
2. Работа с selection/range.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 30.08.2012, 18:47
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Универсально просто наверное никак, нужно искать закономерности (удалять каждое второе совпадение, например, если всегда идёт пара: текст в атрибуте - текст)
Ответить с цитированием
  #4 (permalink)  
Старый 30.08.2012, 18:56
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Aetae
Как сказал бы Тёма: так
document.body.innerHTML = document.body.innerHTML ...
делают только мудаки.
нерекомендуемо, но и не запрещено, для простых случаев почему бы и нет

<div>text</div>
<div>text</div>

<script>
window.onload = function () {

	document.body.innerHTML = document.body.innerHTML.replace(/text/g, '<button>click</button>');
		
	var buts = document.getElementsByTagName('button');
	
	buts[0].onclick = function () {
		alert(1);
	}
	buts[1].onclick = function () {
		alert(2);
	}
	
}
</script>


В атрибутах если задавать, то тоже не плохо (а-а, в принципе уже несколько раз обсуждалось)
Ответить с цитированием
  #5 (permalink)  
Старый 30.08.2012, 19:07
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,495

Такие "простые" случаи, бывают только во всяческих "примерах" и учебных задачках. На деле они не встречаются практически никогда.
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 30.08.2012, 19:12
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от Aetae
Такие "простые" случаи, бывают только во всяческих "примерах" и учебных задачках. На деле они не встречаются практически никогда.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убрать замену символьных ссылок(&#xD;&#xA; и т.д.) при сериализации(печати) xml? hard-t Events/DOM/Window 0 18.01.2012 16:10
Как отловить обратное событие "click" ? jsuse Общие вопросы Javascript 2 18.01.2012 00:16
как реализовать передачу функции в функцию?? czp Общие вопросы Javascript 10 29.11.2011 19:21
JS классы - как объединить функции в класс olga153b Events/DOM/Window 3 01.11.2011 14:13
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56