Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как произвести замену корректно? (https://javascript.ru/forum/misc/31225-kak-proizvesti-zamenu-korrektno.html)

z700i 30.08.2012 16:58

Как произвести замену корректно?
 
Как заменить некоторые слова на странице на 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" \/>');

То портится не только часть с заменой, а весь документ

Aetae 30.08.2012 18:43

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

Вариантов есть пара в зависимости от конкретной задачи, но скорее всего сама задача кривая.
1. Перебор элементов и замена в текстовых нодах.
2. Работа с selection/range.

bes 30.08.2012 18:47

Универсально просто наверное никак, нужно искать закономерности (удалять каждое второе совпадение, например, если всегда идёт пара: текст в атрибуте - текст)

bes 30.08.2012 18:56

Цитата:

Сообщение от 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>


В атрибутах если задавать, то тоже не плохо (а-а, в принципе уже несколько раз обсуждалось)

Aetae 30.08.2012 19:07

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

bes 30.08.2012 19:12

Цитата:

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

:yes:


Часовой пояс GMT +3, время: 11:01.