javascript - 在 CKEditor 中重新加载页面后保留光标位置

标签 javascript ckeditor

我在我的项目中使用 CKEditor(4.1)。我想在用户重新加载页面后保留光标在编辑器中的位置。 CKEditor 提供

var bookmark = editor.selection.createBookmarks();

存储光标位置。但是,如果我使用

var data = editor.getData()

返回以下内容

<p>one</p>

<p>two<span style="display:none">&nbsp;</span></p>

<p>three</p>

而不是下面的

<p>one</p>

<p>two<span data-cke-bookmakrs="1" style="display:none">&nbsp;</span></p>

<p>three</p>

config.js中,我做了以下事情

config.extraAllowedContent = "span[data-cke-bookmark]"

我在这里错过了什么?

提前感谢您的回答和建议...

最佳答案

我找到了解决问题的方法。我不会说这是一个直接的解决方案。(我没有检查 IE)

一旦我创建了书签,它将返回如下 JSON 对象

{collapsed: true,
endNode: undefined,
serializable: undefined,
startNode: CKEDITOR.dom.element}

你可以通过

获取引用元素
var spanRef =  object.startNode.$;

还有一个自定义属性。

$(spanRef).attr('data-selection-bookmark','1')//here value '1' doesn't mean anything

并在 config.js

中执行以下操作
config.extraAllowedContent = "span[data-selection-bookmark]"

当您使用editor.getData()询问编辑器内容时,它将返回以下内容

<p>one</p>

<p>two<span data-selection-bookmakr="1" style="display:none">&nbsp;</span></p>

<p>three</p>

下半场(重新加载或重新初始化后)

var editor = CKEDITOR.replace( 'editor_textarea');
editor.on( 'contentDom', function(){
   var ifrWin = getIframeWindow(); //You need write a code to get iframe window of CKEditor


        var range = document.createRange();

        var sel = ifrWin.getSelection();

        var doc = editor.document.$;

        var $span = $( doc.body ).find( 'span[data-selection-bookmark]' );

        range.selectNode( $span[ 0 ] );// To move the cursor before

        range.collapse(true);

        sel.addRange(range);

        $span.remove();


        ifrWin.document.getElementsByTagName('body')[0].focus();
});

关于javascript - 在 CKEditor 中重新加载页面后保留光标位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524002/

相关文章:

javascript - CKEditor 焦点 CSS 更改

ruby-on-rails - CKEditor 和 iFrame/YouTube/其他嵌入插件显示奇怪的 HTML 代码

javascript - Angularjs - 如果元素不存在则隐藏元素

javascript - 销售税 (JavaScript)

javascript - 如何在 Javascript 中将 slider 绑定(bind)到变量?

javascript - 如何阻止对 CKEDITOR textarea 中的某些内容进行编辑?

asp.net core mvc 中的 CKEditor 数据绑定(bind)

javascript - CKEDITOR 小部件拖放到所需元素中

javascript - Jquery 选择功能在生日时自动年龄而不是输入类型日期

javascript - 在 html 中使用多个页面时,$(window).scroll 不会触发事件