Здравствуйте. Предистория такова. В JavaScript я как слон в балете. Понадобилось приделать кнопочку в редакторе, для облегчения жизни пользователей. Скрипт должен находить массив Русских слов в переменной и заменять эти слова, на такие же, только обрамленные тегами <b></b>. У меня даже получилось выделять слова, но вылезла другая неприятность. Скрипт не различает слов которые уже выделены. То есть если нажать кнопку еще раз, он добавляет еще по тегу с каждой стороны и получается уже <b><b>слово</b></b>. И так до бесконечности. То есть он не понимает, что слово уже выделено. Суть вопроса такова. Может у кого есть, что-то рабочее для этих целей? Нужно чтоб скрипт при первом нажатии находил слова из массива и обрамлял тэгами, при повторном нажатии очищал от тегов, а не добавлял еще пару. Фуф, отето я намолол
надеюсь понятно.
(function() {
tinymce.create('tinymce.plugins.replacer', {
init : function(ed, url) {
ed.addCommand('mcereplacer', function() {
var replic = ed.selection.getContent();
if (replic == "<strong>Режисер</strong>"){
ed.execCommand('mceReplaceContent',false, ed.selection.getContent().replace(new RegExp('<strong>Режисер</strong>', 'igm'), 'Режисер' ) );
});
ed.addButton('replacer', {
title : 'Замена строк',
cmd : 'mcereplacer',
image : url + '/img/searchreplace.gif'
});
}
});
Отето моя поделка, нерабочая уже. Но я честно признался, ничего не смыслю
. Подмогите пожалуйста.
Нашел еще такой пример
//Сама функция замены слов в найденных нодах.
function replaceWords(opt) {
// scope - глобальная область поиска (document.body к примеру)
// keyword - слово, которое мы ищем и заменяем
findText(scope, new RegExp('\\b' + keyword + '\\b', 'gi'), function(node, match) {
currentKeywordCount++;
// Вот тут создаем элемент, в который будем заворачивать слово.
var span = document.createElement('span');
node.splitText(match.index + keyword.length);
span.appendChild(node.splitText(match.index));
node.parentNode.insertBefore(span, node.nextSibling);
});
}
// Рекурсивный поиск в пределах (element) дерева DOM
function findText(element, pattern, callback) {
for (var childi = element.childNodes.length; childi-->0;) {
var child= element.childNodes[childi];
if (child.nodeType == 1) {
findText(child, pattern, callback);
} else if (child.nodeType==3) {
var matches= [];
var match;
while (match= pattern.exec(child.data)) matches.push(match);
for (var i = matches.length; i-->0;) callback.call(window, child, matches[i]);
}
}
}
Но тут боюся голова лопнет.