CKEditor -当DOM节点被删除时销毁实例
CKEditor - destroy an instance when the DOM node has been deleted
通过阅读CKEditor文档,我看到他们有一个选项来销毁一个实例与CKEDITOR.instances.instanceName.destroy();
。然而,如果DOM已经改变,整个所见即所得DOM结构已被删除,我得到以下错误在Chrome:
Uncaught TypeError: Cannot read property 'document' of null
…在Firefox中:
i.contentWindow is null
有办法解决这个问题吗?
由于我的应用程序的结构方式(通过AJAX加载内容),当元素仍然在页面上时,我不能调用.destroy()
。
如果需要在AJAX调用后销毁ckeditor对象和DOM中的元素,可以通过为函数调用destroy(true)设置布尔参数来实现。这样它就不会尝试更新DOM:
var editor = CKEDITOR.instances[name];
if (editor) { editor.destroy(true); }
CKEDITOR.replace(name);
我写了2个函数来更好地控制这些东西。请注意,在使用这些函数之前,我已经声明了一个变量,但是还有很多更巧妙的方法,但是这种方法对于我需要它的目的来说已经足够好了(我只使用和需要一个实例):
if(typeof(editor) == 'undefined')
var editor=null;
function ck_delete(editor)
{
if(typeof(editor) != 'undefined' && editor!=null)
editor.destroy();
}
function ck_init(ck_inst_name)
{
var el_id=document.getElementById(ck_inst_name);
if(typeof(el_id) != 'undefined' && el_id!=null)
{
if(typeof(editor) == 'undefined' || editor==null)
{
editor=CKEDITOR.replace( ck_inst_name );
}
else
{
ck_delete(editor);
editor=null;
editor = CKEDITOR.replace( ck_inst_name );
}
}
}
我还检查应该被替换的HTML元素是否存在,这样我就不会得到错误消息。
您可以在http://dev.ckeditor.com/ticket/8226应用其中一个补丁,它将工作。我推荐这个:http://dev.ckeditor.com/attachment/ticket/8226/8226_5.patch
我们在GWT中集成CKEDITOR时遇到了这个问题,在一个弹出式对话框中。当对话框被销毁时,CKEDITOR抛出这个错误-"不能读取属性'document'为null。"解决方案是在关闭对话框之前销毁CKEDITOR。(我们必须扩展GWT ckeditor类来覆盖这个——使用Erik给出的editor.destroy(true)语法——谢谢,Erik!)
- 如何删除特定文本短语的所有实例
- 使用javascript删除特定HTML实体(breadcrumb)的最后一个实例
- 删除所有CKEditor实例
- 为什么在删除指令之后“;人;类的实例仍然存在
- CodeMirror 删除编辑器实例
- 删除数据网格 (Dojo) 和表 (数据网格) 的实例正确显示
- 删除聚合物元素,文件上传在实例上传时逐渐添加更多文件
- jQuery插件实例并删除/销毁它们
- 如何在 Angularjs 视图中删除 dom 实例
- 单击按钮时删除类的所有实例
- 删除多个字符之一的第一个实例之后的所有内容
- 有没有办法使用 gulp 删除 require.js 定义([..]) 包装器的所有实例
- 如何使用续集/ MySQL删除特定实例的关系
- 如何删除多维数据集.js实例的一天之后的事件
- 使用其他javascript删除字符串中某个字符的所有实例
- 在Javascript中,我应该删除以前的级别吗;s实例
- Javascript:当生成id时,需要删除页面上一个类的单个实例
- 重置'setIntervall'计数器/删除现有实例
- 删除多余的;#字符串中的实例
- 使用实例删除javascript中基于id的对象