Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在从DOM中删除编辑器后删除CKeditor实例_Javascript_Jquery_Dom_Ckeditor_Dom Events - Fatal编程技术网

Javascript 如何在从DOM中删除编辑器后删除CKeditor实例

Javascript 如何在从DOM中删除编辑器后删除CKeditor实例,javascript,jquery,dom,ckeditor,dom-events,Javascript,Jquery,Dom,Ckeditor,Dom Events,关于如何删除CKeditor实例,有一些相关的问题,大多数都是使用.destroy()。但是,当编辑器仍在dom中时,这是很好的。我有一种情况,CMS正在添加一个文本区域,我正在将其转换为一个编辑器。cms从dom中移动元素(在不相关的事件上) 我可以将一个事件绑定到该无关事件的completeemit,这样就可以重新初始化CKeditor。所有这些都很好,但当我删除那些遗留实例时,我会出现错误,我就是这样尝试的: for (var name in CKEDITOR.instances) {

关于如何删除CKeditor实例,有一些相关的问题,大多数都是使用
.destroy()
。但是,当编辑器仍在dom中时,这是很好的。我有一种情况,CMS正在添加一个文本区域,我正在将其转换为一个编辑器。cms从dom中移动元素(在不相关的事件上)

我可以将一个事件绑定到该无关事件的
complete
emit,这样就可以重新初始化CKeditor。所有这些都很好,但当我删除那些遗留实例时,我会出现错误,我就是这样尝试的:

for (var name in CKEDITOR.instances) {
    CKEDITOR.instances[name].destroy(true);
}
但它会产生一个错误:

未捕获的TypeError:无法读取null的属性“clearCustomData”

我知道,您将看到代码:

  • 从textarea创建ckeditor实例
  • 删除父dom元素
  • 创建新的dom元素
  • 试图删除所有当前实例
  • 创建新的ckeditor实例
  • 步骤4生成错误

    n.b.关于删除ckeditor实例的相关问题与仍然存在的dom元素有关,在这种情况下,dom已被删除。我无法控制要删除的dom元素

    是否有方法将事件绑定到移除其父dom元素时触发的ckeditor?我想即使是这样,我还是会关注这个问题。有人知道吗

    n.b.我在本项目的其他地方使用jQuery,因此,即使我没有在ckeditor代码中使用jQuery,也适合使用包含jQuery的解决方案

    更新:

    我确实尝试将实例设置为
    null
    ,这确实有效,但不会杀死在CKeditor实例上创建的对象。i、 e.
    CKEDITOR.htmlDataProcessor
    (在Chrome开发工具中使用'Profiles->Heap snapshot'可以很好地演示这个问题)

    更新:

    感谢@oleq提供的信息,我查看了讨论,但无法确定如何添加到讨论中,因此在此处更新:

    请查看dom更改前后mem配置文件的图像

    您将看到CKEDITOR属性的大小确实增加了

    我注意到,
    CKEDITOR.instances.editor1.element.$
    存储了CKEDITOR绑定到/触发的元素。是否检查该元素上的现有ckeditor实例,这将销毁现有的
    ckeditor.htmlDataProcessor
    etc对象,并在将新实例添加到文本区域之前重新创建


    这听起来是否合适,或者这被视为边缘案例的事实是否意味着其优先级太低?如果认为这是一个合理的解决方案,我很乐意投入工作并拉取请求?

    控制CKEditor实例销毁的算法不是为处理边缘情况而设计的。错误被抛出,因为基本上
    editor.window.getFrame()
    返回
    null


    这是一种边缘情况。

    控制CKEditor实例销毁的算法不是为处理边缘情况而设计的。错误被抛出,因为基本上
    editor.window.getFrame()
    返回
    null


    这是一种边缘情况。

    控制CKEditor实例销毁的算法不是为处理边缘情况而设计的。错误被抛出,因为基本上
    editor.window.getFrame()
    返回
    null


    这是一种边缘情况。

    控制CKEditor实例销毁的算法不是为处理边缘情况而设计的。错误被抛出,因为基本上
    editor.window.getFrame()
    返回
    null


    这是一个边缘案例。

    问题的根本原因似乎已在

    简而言之,在调用destroy之前,iFrame元素会从DOM中分离/删除,这会导致ckEditor getFrame方法返回null


    在升级到最新的ckEditor版本之前,我的解决方法是将销毁放在一个try/catch中。

    问题的根本原因似乎已在中修复

    简而言之,在调用destroy之前,iFrame元素会从DOM中分离/删除,这会导致ckEditor getFrame方法返回null


    在升级到最新的ckEditor版本之前,我的解决方法是将销毁放在一个try/catch中。

    问题的根本原因似乎已在中修复

    简而言之,在调用destroy之前,iFrame元素会从DOM中分离/删除,这会导致ckEditor getFrame方法返回null


    在升级到最新的ckEditor版本之前,我的解决方法是将销毁放在一个try/catch中。

    问题的根本原因似乎已在中修复

    简而言之,在调用destroy之前,iFrame元素会从DOM中分离/删除,这会导致ckEditor getFrame方法返回null


    在升级到最新的ckEditor版本之前,我的解决办法是将销毁放在try/catch中。

    谢谢。已经用建议/附加信息更新了问题谢谢。已经用建议/附加信息更新了问题谢谢。已经用建议/附加信息更新了问题谢谢。已使用提案/附加信息更新问题