1

在我使用 CKEditor 的 InsertHtml 函数以编程方式向其中添加了许多页面之后,我一直在 stackoverflow 和其他地方探索许多解决方案,以尝试让 ckeditor 4 滚动到顶部。添加看起来不错的html后,我想将光标定位在开头。

这是我尝试过的各种事情之一,但没有成功:

function MoveCaretToStart(myEditor) {
    var range = new CKEDITOR.dom.range( editor.document );
    range.selectNodeContents(editor.document.getBody());
    range.moveToElementEditStart(range.root);  // also tried range.collapse(true);
    range.select();
}
...
MoveCaretToStart(CKEDITOR.instances['myEditor']);  // which already has contents in it

这不会引发任何错误,但也不会移动光标位置(它保留在文档的末尾)。我以为这很容易,但事实并非如此。任何帮助表示赞赏。

11 月 1 日更新: 我刚刚做了以下测试:创建了一个只有一个文本区域的简单 html 页面,删除了所有额外的插件。我显示页面,在编辑器中输入文本(效果很好),然后使用 JS 控制台调用 MoveEditorToBeginning(); 没有任何反应,控制台回显“未定义”。我受阻了。这是整个 html 页面源代码(使用 CkEditor 4.22):

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="ckeditor/ckeditor.js"></script>
</head>

<body>
<textarea cols="80" id="docBody" name="docBody" tabindex="1" accesskey="d" rows="10">    </textarea>
<script type="text/javascript">
//<![CDATA[
CKEDITOR.replace( 'docBody',
{
    removePlugins:  'elementspath,stylesheetparser,a11yhelp ,autosave,docprops,fakeobjects,find,image,link,magicline,pagebreak,pastefromword,scayt,specialchar,texttransform,wordcount,wsc',

});
//]]>

function MoveEditorCaretToBeginning() {
var theEditor = CKEDITOR.instances['docBody'];
    var body        = theEditor.document.getBody();
    var range       = new CKEDITOR.dom.range(body);
    range.selectNodeContents(body);
    range.collapse(true);
    var selection   = theEditor.getSelection();
    selection.selectRanges([range]);
}
</script>
</body>
</html>
4

1 回答 1

1

这对我有用(editormyEditor你的情况下):

var body = editor.document.getBody();
var range = new CKEDITOR.dom.range(body);
range.selectNodeContents(body);
range.collapse(true);
var selection = editor.getSelection();
selection.selectRanges([range]);
于 2013-10-31T05:18:30.953 回答