2010-09-11 97 views
10

我为此动态创建和销毁textareas。但是,当我创建一个textarea然后在tinymce中创建它的一个实例时 - 然后再次返回页面,它不起作用。我发现解决方案是简单地删除任何现有的同名实例,但我想知道是否可以在启动时执行它。如何在启动时删除所有的tinymce实例?

在此先感谢!

回答

13

您必须确保textareas或您创建一个小实例的其他元素需要具有不同的ID。

要删除您可以使用所有TinyMCE的实例(tinymce3):

 for (var i = tinymce.editors.length - 1 ; i > -1 ; i--) { 
      var ed_id = tinymce.editors[i].id; 
      tinyMCE.execCommand("mceRemoveControl", true, ed_id); 
     } 

对于tinymce4使用:

 for (var i = tinymce.editors.length - 1 ; i > -1 ; i--) { 
      var ed_id = tinymce.editors[i].id; 
      tinyMCE.execCommand("mceRemoveEditor", true, ed_id); 
     } 

确保关闭情况下,正确的方式,当您试图重新初始化TinyMCE的实例。否则,您的编辑器窗口可能会保持白色,或者根本无法编辑。

+1

因为tinymce.editors.length集合大小 – P6345uk 2013-07-15 14:40:59

+1

减少@ P6345uk这是行不通的:正确的,我把这个考虑在内现在 – Thariama 2013-07-15 14:54:30

+0

很酷很快 – P6345uk 2013-07-15 15:15:03

0

您可以在JavaScript的onload功能或保存前一个实例的形式使用这些线

if (tinyMCE.getInstanceById(id) != null) 
{ 
    tinyMCE.execCommand('mceRemoveControl', true, id); 
} 

其中id是textarea的或输入的id,进入TinyMCE的存在

0

正如前面@ P6345uk在评论中表示,tinymce.editors.length集合的大小正在减小。

因为来自@Thariama的代码也没有为我工作,所以我没有更新,并做出了这些行。为我工作,也尝试一下。

var length = tinymce.editors.length; 
if(length>0){ 
    for (var i=0; i<length; i++) { 
     tinyMCE.execCommand('mceRemoveControl',false, tinymce.editors[0].id); 
    }; 
} 
6

我的同事发现贝尼一个聪明的解决方案,以消除所有现存TinyMCEs:

if(typeof(tinyMCE) !== 'undefined') { 
    var length = tinyMCE.editors.length; 
    for (var i=length; i>0; i--) { 
    tinyMCE.editors[i-1].remove(); 
    }; 
} 
1

这是我使用的是什么,似乎很好地工作:

while (tinymce.editors.length > 0) { 
    tinymce.remove(tinymce.editors[0]); 
} 
9

对我的作品此解决方案:

tinymce.editors = []; 

S O,可以先清除编辑阵列并重新初始化使用init编辑:

tinymce.editors = []; 
tinymce.init({ 
    selector: 'textarea.tinymce', 
    ... 
}); 
+1

这解决了Firefox上的问题。大 – anhnt 2015-10-08 06:32:54

+1

这应该是公认的答案!简单,在IE中运行良好(我也是11)。 – toni07 2016-04-16 14:42:05

+0

+1。唯一能为我工作的东西(tinymce 4.3。13,firefox 47,在jquery UI标签中编辑器的多个实例,用户需要不断更改标签并更改编辑器内容) – andrew 2016-06-24 06:53:03