CKEditor恢复元素/撤消所有更改

CKEditor restore element / undo all changes

本文关键字:撤消 恢复 元素 CKEditor      更新时间:2023-09-26

是否有一种方法可以恢复原始内容/撤消已成为Inline-CKEditor的元素的所有更改?

似乎不存在这样的内置函数,例如这个ticket

一些人建议使用onclick javascript事件按钮来重新加载页面。或者将初始数据保存在编辑器中,并再次使用javascript替换事件上的内容。(这是一个关于你的请求与上述技巧的线程。)

我的解决方案:

实例化CKEditor后,我将CKEDITOR.editor1.getData()的初始内容保存到自定义变量CKEDITOR.editor1.firstSnapshot。后来当我想恢复它时,我用CKEDITOR.editor1.setData(CKEDITOR.editor1.firstSnapshot);

把它写回来。

起初我想使用getSnapshot(),但它总是返回true,所以这对我不起作用。

我想分享一种不同的解决问题的方法。我使用内联CKEditor,并有一个模糊事件(当用户不聚焦CKEditor时),提示保存内容或回滚更改的选项。

对于回滚的情况-我只是把checkDirty() -检查实例是否有变化的函数-在while循环中,所以undo在每个true中执行,直到ckeditor将恢复到初始状态。

代码看起来像这样:

CKEDITOR.instances["editor"].on('blur', function (evt) {
    if (confirm("Do you wish to roll back changes ?")) {
        while (CKEDITOR.instances["editor"].checkDirty())   {
            CKEDITOR.instances["editor"].execCommand('undo');
        }
    } else {
        // do nothing!
    }                        
})