【问题标题】:CKEditor 4: How to save and restore the cursor / caret position?CKEditor 4:如何保存和恢复光标/插入符号的位置?
【发布时间】:2017-11-13 20:08:56
【问题描述】:

我知道这里发布了一些类似的问题,但似乎没有一个回答我的问题(或者可能是我不太了解这个概念)。我首先想要在 CKeditor 实例中获取和设置插入符号的位置(问题是 here)。在帮助下,我明白我需要使用范围和偏移量来实现这个目标。

但是我现在的问题是我不知道如何将这个位置保存在某个地方,可能是一个数据库并恢复插入符号的位置。您可以想象用户修改文档并保存它。当他回来继续编辑时,应该加载文档并将插入符号返回到最后一个已知位置。

所以,要在 javascript 中从 CKeditor 获取插入符号位置,没关系。我可以得到我的范围对象。但是我该如何保存呢?如何将其发送到服务器进行存储?我该如何取回它?作为字符串? 是否有序列化和反序列化范围或 dom 节点的机制?

感谢您的帮助!

【问题讨论】:

    标签: html dom ckeditor range ckeditor4.x


    【解决方案1】:

    是否有序列化和反序列化范围或 dom 节点的机制?

    CKEditor 4 中有一个叫做bookmarks 的机制。你可以使用CKEDITOR.dom.range.createBookmark,它基本上为当前范围(选择)创建一个书签,然后可以通过CKEDITOR.dom.range.moveToBookmark 恢复它。

    要使书签可序列化(因此您可以将整个内容保存到数据库,然后在加载内容时恢复选择),您必须将true 传递给creatBookmark,如createBookmark( true ),这表示书签节点必须包含ID,可以用来恢复范围。

    【讨论】:

    • 感谢您的帮助。我曾尝试使用书签,但似乎它们不适合我的目的。它们不在文档中维护,以便在文档保存和重新加载后可以使用。
    • @Xosted 没有维护它们是什么意思?如果您使用序列化书签,当您从编辑器获取数据时,它们应该被保留。
    • 如果是这样,那我一定是做错了什么。我保存了书签和文档,然后尝试再次访问书签,但失败了。我会做更多的测试并回复你。
    • 所以我进行了一些测试,发现将书签通过JSON.stringify 然后JSON.parse 使其无法使用。您如何建议我继续将书签对象发送到服务器端并将其保存在数据库中,以便稍后将其加载回来并使用它来移动选择?
    • 我知道 JSON 无法处理对象中的函数,因此我尝试创建另一个书签并将数据(endNode、startNode、折叠和可序列化)从解析的字符串复制到新书签。但是,当尝试将范围移动到此书签时,我得到相同的错误 a.getParent is not a functionCannot read property 'getParent' of null from @ 987654331@
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2013-11-18
    • 2016-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多