在 CKEditor 中查找和替换后将光标移动到行尾

Moving the cursor to the end of line after a find and replace in CKEditor

我已经为 CKEditor 4 中的自动更正功能编写了自己的插件,例如,它允许您键入 @abc 并将其替换为“一二三”加 space 字符并将光标放在 space.

之后

这是更新字符串的插件中的 javascript 代码:

var s = editor.getSelection();
var bookmarks = s.createBookmarks(true);
var data = editor.getData();
var replaced_text = data.replace(typedchars, Suggestions + ' ');
editor.setData(replaced_text); 
var range = s.getRanges()[0];
range.moveToBookmark(bookmarks[0]);
range.select();

它在我的本地机器上运行完美,但是一旦我将这段代码投入生产,我就收到一个错误 - range.moveToBookmark(bookmarks[0]); 并且光标移动到行首。

错误是:

Uncaught TypeError: Cannot read property 'getParent' of null

并指向 ckeditor.js 文件中的这一行

setStartBefore: function(a) {
  this.setStart(a.getParent(), a.getIndex())
},

据我所知,ckedtor.js 的两个版本是相同的,没有其他文件发生变化。

Google 上没有任何内容可以说明原因,所以希望这里的人可能有想法。

干杯

修改以上内容,现在完美运行

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 + ' ');
editor.document.getBody().setHtml( replaced_text );
typedchars = '';
restoreCursorLocation( editor );