#javascript #ckeditor
#javascript #ckeditor
Вопрос:
Я написал свой собственный плагин для функции автокоррекции в CKEditor 4, он позволяет вам, например, ввести @abc, и он заменит это на «так просто, как один два три» плюс символ пробела и поставит курсор после пробела.
Это код javascript из плагина, который обновляет строку:
var s = editor.getSelection();
var bookmarks = s.createBookmarks(true);
var data = editor.getData();
var replaced_text = data.replace(typedchars, Suggestions 'amp;nbsp;');
editor.setData(replaced_text);
var range = s.getRanges()[0];
range.moveToBookmark(bookmarks[0]);
range.select();
Он отлично работает на моем локальном компьютере, но как только я запускаю этот код в производство, я получаю сообщение об ошибке в строке — range.moveToBookmark(закладки [0]); и курсор переходит к началу строки.
Ошибка:
Uncaught TypeError: Cannot read property 'getParent' of null
и указывает на эту строку в ckeditor.js файл
setStartBefore: function(a) {
this.setStart(a.getParent(), a.getIndex())
},
Из того, что я вижу, обе версии ckedtor.js те же самые, и никакие другие файлы не изменились.
В Google нет ничего, что указывало бы на причину, поэтому надеюсь, что у кого-то здесь может быть идея.
Приветствия
Комментарии:
1. обновление — исходный код в CKEditor выглядит так <p> просто <span>, как раз два три amp; nbsp; amp;nbsp;</p></span> он не перемещает конец строки и не удаляет закладку
Ответ №1:
изменено выше, и теперь оно работает отлично
editor.focus();
var storeCursorLocation = function( editor ) {
bookmark = editor.getSelection().createBookmarks( true );
};
var restoreCursorLocation = function( editor ) {
editor.getSelection().selectBookmarks( bookmark );
};
storeCursorLocation( editor );
var data = editor.document.getBody().getHtml();
var replaced_text = data.replace(typedchars, Suggestions 'amp;nbsp;');
editor.document.getBody().setHtml( replaced_text );
typedchars = '';
restoreCursorLocation( editor );