Замена подстрок с помощью JavaScript

Когда-то давно Mr. SergE попросил меня написать JS-скрипт, который при загрузке страницы заменяет в тексте определённые символы. Насколько я понял из его поста (хотя особо я его не читал – слишком много буков), ему нужна замена тире, дефисов и прочей дребедени.

В общем скрипт почти написал, но остались некоторые недочёты.

Код

Сначала в массив symbols записываем подстроки для поиска и замены:

symbols = new Array();
symbols[1] = { 'search' : 'k', 'replace' : 'K' }
symbols[2] = { 'search' : '1', 'replace' : 'One' }

В примере маленькая буква “k” заменяется на заглавную “K”, а цифра “1″ заменяется на “One”.

После описания масива для замены символов идёт функция sym_Replace(), в которой весь текст в теге <p> шерстится на предмет наличия вышеописаных символов и с помощью метода replace заменяются на то что нам нужно.

function sym_Replace()
{
for (sym in symbols)
{
replace = symbols[sym]['replace'];
divs = document.getElementsByTagName("p")


for (i=0; i<divs.length; i++)
{
text = divs[i].innerHTML
newtext = text.replace(eval("/" + symbols[sym]['search'] + "/g"), replace);
divs[i].innerHTML = newtext
}
}
}

Поскольку функция replace требует в качестве первого параметра регулярное выражение обрамлённое не кавычками а слэшами, то нужно использовать функцию eval для конвертирования строки в регулярное выражение.

Код можно вставить в head или вынести в отдельный файл. Запускается функция, естественно, при наступлении какого-то события. Если нужно чтобы символы заменялись при загрузке страницы, пишем в body атрибут onload:

<body onload="sym_Replace()">

Минус этой функции состоит в том, что она ищет подстроки во всём тексте внутри данного тэга, т. е. во внутренних тэгах замена тоже может произойти, А это, конечно, уже лишнее. Как решить проблему я пока не выяснил. Пробовал вместо innerHTML использовать innerText, но это свойство отказывается работать.

Несмотря на минусы скрипт может пригодиться всем. А простота его использования очевидна.

Дата: 05.09.2007
»
Категории: JavaScript
Google     

]]> Sam ]]>

eval-то зачем? Можно же объект Regex создать…

»

]]> Никита ]]>

В принципе, да. Можно.

»

]]> Mr. SergE / Poligrāfija » Blog Archive » Type timeline — lielisks resurss par burtu vēsturi ]]>

[...] mokās un veido JavaScript domuzīmju pareizam attēlojumam, cerams, ka drīzumā viss tiks pieslīpēts un varēsim viņu kā spraudni iekš WordPress [...]

»

]]> Mr.SergE ]]>

Ņikita — kā spraudni priekš WordPress to arī var sataisīt?

»

]]> Никита ]]>

Atbildēju :)

»

]]> Mr.SergE ]]>

Paldies! Tagad mēģināsim to iebāzt iekšā WordPress…

»

]]> Stac ]]>

А зачем, в принципе, может понадобиться такой скрипт?

»

]]> Никита ]]>

Stac, если нужно заменить подстроку на лету. В принципе не особо нужен, просто Mr.SergE просил ))

»

]]> Amarama ]]>

Спасибо большое!

»

Напишите комментарий