初始化Shared CKEditor后恢复插入位置?

时间:2016-07-06 15:28:55

标签: jquery ckeditor

当用户点击我的页面构建器中的contenteditable元素时,我会触发一个初始化Shared CKEditor实例的点击事件。

问题是我丢失了插入位置,CKEditor将此光标放在文本的开头?

我想将插入符号位置恢复到用户在初始化之前单击的相同位置。这主要是在文本的中间。

要实现这一目标,我需要两个步骤:

  1. 在初始化CKEditor之前获取插入位置
  2. 在CKEditor' instanceReady'中使用插入位置。事件并将指针放回去。
  3. 我找到了这段代码(来自here):

    editor.focus();
    var selection = editor.getSelection();
    var range = selection.getRanges()[0];
    var pCon = range.startContainer.getAscendant({p:2},true); //getAscendant('p',true);
    var newRange = new CKEDITOR.dom.range(range.document);
    newRange.moveToPosition(pCon, CKEDITOR.POSITION_BEFORE_START);
    newRange.select();
    

    但这仅在编辑器已经实例化时才有效。在我的情况下,我没有编辑就开始了。

    有什么方法可以完成这项工作吗?

2 个答案:

答案 0 :(得分:0)

您是否只想初始化编辑器,以便光标位置是他们点击开始编辑的位置?

在启动编辑器之前,您可以使用选择范围并在原始HTML中插入占位符。

启动编辑器后,在编辑器内容中找到占位符,将其删除,然后将插入符号放在那里。占位符可以像<span class="caret-placeholder"></span>一样简单。

答案 1 :(得分:0)

使用jQuery,您可以使用:

获取光标位置
$('#element').prop("selectionStart");

原生JS将是:

document.getElementById('#element').selectionStart;

(如果您必须支持IE8及以下版本,则需要其他代码。)

在您的点击事件中,您需要获取CKEditor实例:

CKEDITOR.instances

然后你应该能够使用你的代码来设置光标位置。