Я создал плагин для CKEditor, но он опирается на текущий выбранный текст.
В FF и Chrome я могу использовать:
var selectedText = editor.getSelection().getNative();
, но это не работает в IE, и я получаю только [object Object]
[object Object]
Есть предложения?
Вот что я использую:
var mySelection = editor.getSelection(); if (CKEDITOR.env.ie) { mySelection.unlock(true); selectedText = mySelection.getNative().createRange().text; } else { selectedText = mySelection.getNative(); }
Использование:
editor.getSelection().getSelectedText();
Или:
CKEDITOR.instances["txtTexto"].getSelection().getSelectedText()
"txtTexto" = идентификатор тега textarea
Для тех, кто хочет предварительно заполнить поля выбором, просто сделайте это так и обезопасьте себя от долгого путешествия.
onShow: function() { this.setValueOf( 'tab-id', 'field-id', editor.getSelection().getSelectedText().toString() ); },
Хорошего дня!
@ TheApprentice
Вы сформулировали это так:
( function(){ var getSelectedText = function(editor) { var selectedText = ''; var selection = editor.getSelection(); if (selection.getType() == CKEDITOR.SELECTION_TEXT) { if (CKEDITOR.env.ie) { selection.unlock(true); selectedText = selection.getNative().createRange().text; } else { selectedText = selection.getNative(); } } return(selectedText); } ...
с таким звонком:
onShow: function() { // Get the element currently selected by the user var editor = this.getParentEditor(); var selectedContent = getSelectedText(editor);
В более новых версиях CKEDITOR, кажется, есть более простой способ:
var selectedHTML = editor .getSelectedHtml() .getHtml(); //result: <p>test</p>