Показать сообщение отдельно
  #1 (permalink)  
Старый 09.02.2012, 20:04
Новичок на форуме
Отправить личное сообщение для Morfei Посмотреть профиль Найти все сообщения от Morfei
 
Регистрация: 09.02.2012
Сообщений: 2

Поиск и замена в выделенном тексте
Здравствуйте. Предистория такова. В 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]);
    }
  }
}
Но тут боюся голова лопнет.

Последний раз редактировалось Morfei, 09.02.2012 в 20:09.
Ответить с цитированием