2014-12-17 6 views
4

Я использую в своем проекте CKEditor (4.1). Я хотел бы сохранить позицию курсора в редакторе после перезагрузки страницы пользователем. CKEditor обеспечиваетСохраните позицию курсора после перезагрузки страницы в CKEditor

var bookmark = editor.selection.createBookmarks(); 

для хранения курсора position.However, если я использую

var data = editor.getData() 

возвращает следующее содержание

<p>one</p> 

<p>two<span style="display:none">&nbsp;</span></p> 

<p>three</p> 

вместо следующего

<p>one</p> 

<p>two<span data-cke-bookmakrs="1" style="display:none">&nbsp;</span></p> 

<p>three</p> 

В config.js, я сделал следующее дело

config.extraAllowedContent = "span[data-cke-bookmark]" 

Что я здесь отсутствует?

Заранее спасибо за ваши ответы и предложения ...

ответ

3

я нашел обходной путь для решения этой проблемы. Я не буду говорить, что это прямое решение. (Я не проверить IE)

После создать закладку, она будет возвращать объект JSON следующего

{collapsed: true, 
endNode: undefined, 
serializable: undefined, 
startNode: CKEDITOR.dom.element} 

И вы можете получить опорный элемент от

var spanRef = object.startNode.$; 

И пользовательский атрибут.

$(spanRef).attr('data-selection-bookmark','1')//here value '1' doesn't mean anything 

И сделать следующий вещь в config.js

config.extraAllowedContent = "span[data-selection-bookmark]" 

Когда вы задаете содержание редактора с помощью editor.getData(), Он будет возвращать следующие

<p>one</p> 

<p>two<span data-selection-bookmakr="1" style="display:none">&nbsp;</span></p> 

<p>three</p> 

Следующая Половина (мастика или Reinit)

var editor = CKEDITOR.replace('editor_textarea'); 
editor.on('contentDom', function(){ 
    var ifrWin = getIframeWindow(); //You need write a code to get iframe window of CKEditor 


     var range = document.createRange(); 

     var sel = ifrWin.getSelection(); 

     var doc = editor.document.$; 

     var $span = $(doc.body).find('span[data-selection-bookmark]'); 

     range.selectNode($span[ 0 ]);// To move the cursor before 

     range.collapse(true); 

     sel.addRange(range); 

     $span.remove(); 


     ifrWin.document.getElementsByTagName('body')[0].focus(); 
}); 
+1

Вместо использования собственного выбора и диапазона вы должны использовать систему выбора CKEditor. Создайте сериализуемую закладку, переместите атрибуты 'data-cke- *' в 'data- *', чтобы они не удалялись при получении данных, получают данные. Затем загрузите эти данные, замените атрибуты 'data- *' 'data-cke- *' и используйте ['moveToBookmark()'] (http://docs.ckeditor.com/#!/api/CKEDITOR.dom. range-method-moveToBookmark). В основном - попробуйте использовать как можно больше материалов CKEditor, потому что это безопаснее. – Reinmar

+0

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

+0

@Reinmar: Спасибо за предложение. – Kirubachari

Смежные вопросы