2013-03-07 2 views
2

Я много работаю с позиционированием внутри CKEDITOR. Но я до сих пор не могу понять, почему следующий код иногда не работает?CKEDITOR - Установить Caret до конца

var range = new CKEDITOR.dom.range(editor.document); 
    range.moveToElementEditablePosition(element, setToEnd); 
    editor.getSelection().selectRanges([range]); 

Я думаю, что это как-то связано с элементом ввода, который я даю. Но я не уверен.

Кто-нибудь знает, каковы требования к moveToElementEditbalePosition для работы? Последний раз, когда я проверил свой ввод, был элемент SPAN.

http://docs.ckeditor.com/#!/api/CKEDITOR.dom.range-method-moveToElementEditablePosition

Или есть более безопасное решение (кросс-браузер)?

==== ==== редактировать

Я нашел ошибку, и это исходит от нового CKEDITOR.dom.range

TypeError: б неопределен

Это означает, что редактор .document пуст, но когда я смотрю в editor.document, он заполнен?

Когда я пытаюсь установить диапазон во второй раз после того, как ошибка и она показывает следующее сообщение об ошибке: неперехваченное исключение: DOMException: INVALID_STATE_ERR

ответ

3

Тест HTML:

<p><span id="test">Text</span></p> 

И это JS :

var e = CKEDITOR.instances.editor1; 
var span = e.document.getById('test'); 
var range = e.createRange(); 

range.moveToElementEditablePosition(span, 1); 
range.select(); 
e.insertText('FOO'); 

range.moveToElementEditablePosition(span); 
range.select(); 
e.insertText('BAR'); 

результат кажется правильным:

<p><span>BARTextFOO</span></p> 

Есть ли у вас какие-либо другие случаи?

+0

Ваше решение короче и чище. И работает с кодом getByID, но также с моим getNextNode(), чтобы найти элемент. Я не знаю, связано ли это с новой версией CKEDITOR.dom.range, которую я использовал. но ваше решение работает !, как всегда. – spons

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