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 ответа:
Выберите свой яд (оба метода работают в 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'))
Плюсом является то, что вы защищены от изменений в том, как называются и вызываются внутренние функции редактора, но минусом является то, что ваш код больше не зависит от браузера.
Вам, вероятно, нужно это:
$('#redactor_content').getDoc()[0].getSelection();
Попробуйте это:
- перейти к: http://redactorjs.com/docs/examples/fixed/ ,
- выделите некоторый текст
В Firefox (или Chrome) откройте консоль и введите:
alert($('#redactor_content').getDoc()[0].getSelection())
- Нажмите Enter или нажмите кнопку Выполнить.