document.body.innerHTML.replace. Замена нескольких слов
Здравствуйте!
Задача - заменить несколько разных слов на странице. Для одного слова использовал document.body.innerHTML = document.body.innerHTML.replace(/Слово1/g, 'Замена1'); Но теперь возникла необходимость заменить также Слово2 на Замена2 и Слово3 на Замена3. Не хотелось бы писать китайский код. Как можно поизящней решить задачу? Спасибо! |
var text
var a = ['слово1', 'слово2'...];
var b = ['замена1', 'замена2'...];
for (var i in a) {
text = text.replace(/a[i]/g, b[i]);
}
|
Мой вариант может показаться сложнее, но думаю что на больших текстах он будет работать быстрее, т.к. по тексту будет проходить один раз:
var text
var a = ['слово1', 'слово2'...];
var b = ['замена1', 'замена2'...];
var allReplaces = {};
for( var i = 0; i < a.length; ++i )
allReplaces[ a[i] ] = b[i];
text = text.replace( RegExp( a.join("|"), "g" ), function(x) { return allReplaces[x]; } );
|
tsigel, в этом случае заменяются буквы ai. Т.е. a[i] воспринимается как ai, а не как элемент массива
|
tsigel,
в вашем примере пятая строка должна быть text = text.replace( RegExp( a[i], "g" ), b[i]); |
Ксать все события, привязанные на элементы - теряем, если привязка не в самом теге
|
nule,
Вариант...
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8" />
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$.fn.replaceText = function (e, f, g) {
return this.each(function () {
var a = this.firstChild,
c, b, d = [];
if (a) {
do 3 === a.nodeType && (c = a.nodeValue, b = c.replace(e, f), b !== c && (!g && /</.test(b) ? ($(a).before(b), d.push(a)) : a.nodeValue = b));
while (a = a.nextSibling)
}
d.length && $(d).remove()
})
};
$(window).load(function () {
$('a').click(function(e){ alert('test') });
var a = ['слово1', 'слово2'];
var b = ['замена1', 'замена2'];
for( var i = 0; i < a.length; i++ )
$("body *").replaceText(new RegExp( a[i], "g" ), b[i]);
});
</script>
<title></title>
</head>
<body>
<p><a href="#">слово1 test слово1</a></p>
<b><a href="#">слово2</a></b>
<p><a href="#">слово1</a></p>
<i><b><a href="#">слово2</a></b></i>
</body>
</html>
|
Всем спасибо! Использовал вариант tsigel с исправлением от rgl. Думаю, для моего случая вполне достаточно. Задача была поправить несколько криво переведенных слов в админке сайта. Так что ограничился самым простым вариантом.
|
IMHO, когда замены всего 3, изящнее всего написать три раза и не наворачивать массивы и циклы, с тем же результатом.
Если речь об админке своего сайта - поменять слова собственно в файле локализации или в файле языкового оверрайда, если CMS это поддерживает. Ищи "language override". Яваскрипт для этого использовать - как раз и есть китайский вариант. :lol: Если же речь о систематической замене слов на чужих страницах в своём браузере - можно использовать аддон типа FoxReplace. https://addons.mozilla.org/ru/firefox/addon/foxreplace :yes: |
рони , а если аяксом перегружается блок с текстом, то слова в тексте можно ли как-нибудь изменить?
Прочитал - http://javascript.ru/forum/136619-post6.html что вроде при аяксе подгружать функцию - которая будет удалять действие прошлых функций(по замене слов) на новую функцию, подскажите что и как делать :) $.fn.replaceText = function (e, f, g)... как удалить функцию? |
| Часовой пояс GMT +3, время: 20:39. |