Положение курсора CKEditor после вставки нередактируемого элемента

У меня проблемы с разработкой плагинов CKEditor, которые вставляют нередактируемое содержимое в текстовый поток. Я пытался использовать функции диапазона, но без особого успеха, так как документация по ним не самая лучшая. Итак, задан некоторый текст, допустим, плагин вставляет "[[нередактируемый материал]]" и затем при отображении в WYSIWYG заворачивает его в span, чтобы его можно было оформить в цвет:

Это некоторый текст[[нередактируемый материал здесь]]

При первой вставке нередактируемого материала мы хотим, чтобы пользователь мог продолжить ввод или нажать Enter для новой строки. Следующий код (который я взял здесь: Как установить позицию курсора в конец текста в CKEditor? ) работает в Firefox, но (естественно) не в IE9, 8 или 7:

var s = editor.getSelection();
editor.insertElement(e); // element 'e'= a span created earlier
var p = e.getParent();
s.selectElement(p);
var selected_ranges = s.getRanges();
selected_ranges[0].collapse(false);  //  false = to the end of the selected node
s.selectRanges(selected_ranges);  // putting the current selection there

Итак, я хочу, чтобы курсор переместился в позицию "^":

This is some text[[uneditable stuff here]]^

Если новый элемент не находится в конце строки, то после его создания курсор должен переместиться сюда:

Это некоторый текст[[нередактируемый материал здесь]]^ с большим количеством текста после нового элемента

В FF я могу получить курсор в конце строки, но не в позиции после нового элемента. В IE курсор все еще находится внутри нового SPAN, который я вижу, когда печатаю, и он все еще в цвете css span, а при переключении на SOURCE view текст исчезает (потому что это нередактируемый span).

Я знаю, что есть метод range.setStartAfter, но не смог заставить его работать даже в FF/Chrome.

Есть ли у кого-нибудь действительно хороший опыт использования диапазона и методов выделения в CKEditor? Я знаю, что я не знаю!

Начинаю думать, что просто использовать editor.insertElement неправильно, и мне следует изучить функции FakeElement (insertBogus?), которые я пока не понимаю. Стоковые плагины для таких элементов, как ссылки и изображения, похоже, не имеют этой проблемы.

8
задан Community 23 May 2017 в 12:33
поделиться