Замена подстрок с помощью 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, но это свойство отказывается работать.
Несмотря на минусы скрипт может пригодиться всем. А простота его использования очевидна.





]]>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]]>Спасибо большое!
»