Jquery получить выделенный текст в Редакторе текстовый редактор


Я использую фантастический текстовый редактор jquery с именемRedactor . Я пытаюсь добавить новую кнопку, которая при нажатии получает текст, который был выделен в текстовом редакторе.

Скрипт позволяет добавить новую кнопку, добавив следующую настройку:

buttonsCustom: {
        button1: {
            title: 'Button', 
            callback: testButton //executes callback on button click
        } 
}  

Затем в обратном вызове я хочу получить выделенный текст

function testButton(obj, event, key)
{
     alert(highlighted_text);
}

Я тщательно просмотрел документацию, и нет никакого способа получить выделенный текст. Я попробовал другие функции, такие как...

function getSelText() {
  var txt = '';
  if (window.getSelection) {
    txt = window.getSelection();
  } else if (document.getSelection) {
    txt = document.getSelection();
  } else if (document.selection) {
    txt = document.selection.createRange().text;
  } else return;
  return txt;
}

...но сценарий текстового редактора уже имеет способ сделать это, и лучше всего было бы использовать его.

В скрипте я нашел, где функция выделения текста находится в строке 1719, но не могу понять, как использовать ее для пользовательской кнопки.

Все, кто имеет опыт работы с редактором, пожалуйста, помогите!

3 4

3 ответа:

Выберите свой яд (оба метода работают в Firefox и IE):

Метод 1: недокументированная внутренняя функция

Существует внутренняя функция с именем getSelection, но она не является частью публичного API.

Вы можете вызвать его с помощью $('#redactor_content').data('redactor').getSelection().

Метод 2: дублирование функциональности

Теперь, если вы не хотите полагаться на доступ к внутренним функциям редактора, вы можете скопировать реализацию в свою собственную функцию, заменив доступ к внутренним переменным на вызов getDoc():

function getRedactorSelection(elem)
{
    var doc = elem.getDoc().get(0);
    if (doc.getSelection)
    {
        return doc.getSelection();
    }
    else if (doc.selection)
    {
        return doc.selection.createRange();
    }
};

Использование: getRedactorSelection($('#redactor_content'))

Плюсом является то, что вы защищены от изменений в том, как называются и вызываются внутренние функции редактора, но минусом является то, что ваш код больше не зависит от браузера.

UPDATE: редактор добавил новую функцию для получения выбранного html.

$('#redactor').getSelected();

Вам, вероятно, нужно это: $('#redactor_content').getDoc()[0].getSelection();

Попробуйте это:

  • перейти к: http://redactorjs.com/docs/examples/fixed/ ,
  • выделите некоторый текст
  • В Firefox (или Chrome) откройте консоль и введите:

    alert($('#redactor_content').getDoc()[0].getSelection())

  • Нажмите Enter или нажмите кнопку Выполнить.