移除所有CKEditor实例

19

我有一个表单,其中我使用CKEditor替换了我的多个<textarea>。在提交表单之前,我想从页面中删除所有CKEditor实例。我该如何实现这一点?

我查看了Remove CKEdit Instance但它并没有帮助到我。

注意:我的所有CKEditor都有一个类“ckedit”。


简短的问题,你为什么需要这样做? - Peon
1
这已经是我发布这篇文章的第三年了,我已经不记得当时需要它做什么了。肯定有一个原因... - erikvimz
是的,我也遇到过这样的解决方案,但不知道为什么要这样实现,因为它在不破坏的情况下也能很好地工作。 - Peon
3个回答

59

这将销毁页面上的所有CKEDITOR实例:

for(name in CKEDITOR.instances)
{
    CKEDITOR.instances[name].destroy(true);
}

1
这个功能很好用,但是当我尝试重新加载时,报错显示 i.contentWindow 为空。在谷歌上搜索后,发现通过将 true 传递给 destroy 可以解决这个错误。 - Matt Bodily
1
出现错误:TypeError:a为null....getDocumentElement()。clearCustomData(); a.clearCustomData(); CKEDITOR.tools.remove... - Jitendra Pancholi
如果出现错误,请尝试以下操作:for(var a in CKEDITOR.instances){CKEDITOR.remove(CKEDITOR.instances[a]);} - Ciri
@Serban,那么做是完全错误的。你只是把它从编辑器实例列表中移除了,但整个对象仍然会留存在内存中,并且最终会导致巨大的内存泄漏。 - AlfonsoML
@AlfonsoML,不幸的是,其他方法对我都没有用。您的代码会出现以下错误:Uncaught TypeError: Cannot read property 'clearCustomData' of null。当我尝试从实例列表中销毁单个编辑器(使用CKEDITOR.instances ['inputProjectTarget8391'] .destroy();)时,我会得到以下错误:Uncaught TypeError: Cannot read property 'document' of undefined。 - Ciri
但是你的代码并没有真正删除编辑器,它只是从列表中删除了它,但它并没有从页面、挂钩事件等删除其元素...你的代码只是给人一种错误的印象,在长期使用中,你会遇到一些意想不到的错误,而其他人无法重现,因为你滥用了CKEditor API。 - AlfonsoML

0
你可以在提交之前使用 jQuery 的 .remove() 方法。

但是这样不会删除整个<textarea>吗?因为<textarea>中包含了类'ckedit'。 - erikvimz
那些 ckeditor 实例,它们有任何 ID 吗?像 ID 的常见模式一样是 ck1、ck2...之类的吗? - Piyush Sardana
我找不到可以循环的重复值或属性。使用jquery.each遍历每个元素,并使用$(this)从中删除实例,这种做法可行吗? - erikvimz
是的,这是可能的,但如果您想要删除实例,则应在each()函数中使用某些条件。each()函数可以遍历所有指定的元素...请查看此fiddle示例http://jsfiddle.net/EjbLx/6/。 - Piyush Sardana
好的,我决定使用ID,将重新编写所有内容。 我尝试了 CKEDITOR.instances.editor1.destroy(); 它完美地工作了,有谁知道,我是否可以使用该函数以某种方式循环遍历50个ID并在存在时将它们删除? 我不想写50次 destory() 函数 -.- - erikvimz
显示剩余2条评论

-15

你试过只是...

delete CKEDITOR;

我遇到过类似的情况,以下是我的解决方法。确保下次需要使用时重新创建它。否则,尝试保持一个实例id数组并循环遍历该数组以销毁它们。


请尝试删除此回答,确保没有人使用此语句。 - I.G. Pascual

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接