【问题标题】:How do I remove all tinymce instances at startup?如何在启动时删除所有 tinymce 实例?
【发布时间】:2010-09-11 21:05:16
【问题描述】:

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

提前致谢!

【问题讨论】:

    标签: javascript jquery dom tinymce


    【解决方案1】:

    您必须确保为其创建小实例的 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 实例时,请确保以正确的方式关闭实例。否则,您的编辑器窗口可能会保持白色或根本不可编辑。

    【讨论】:

    • 这不起作用,因为 tinymce.editors.length 集合的大小正在减小
    • 如果长度为0,就会有未定义的索引,我宁愿用i = 0,增加循环
    • @SimonPaquet:已更正。但倒计时很重要,因为数组 tinymce.editors 的长度会随着每个编辑器关闭而减少。
    • 谢谢!它工作完美。我有多个 TinyMCE 实例,当我重新加载所有内容时,Ajax TinyMCE 停止工作。所以现在我用它来删除所有打开的 TinyMCE 实例。
    【解决方案2】:

    对我来说这个解决方案有效:

     tinymce.editors = [];
    

    所以,你可以先清除 editors 数组,然后用 init 重新初始化编辑器:

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

    【讨论】:

    • 这解决了 Firefox 上的问题。很棒
    • +1。唯一对我有用的东西(tinymce 4.3.13,firefox 47,jquery ui 选项卡中的多个编辑器实例,用户需要不断更改选项卡并更改编辑器内容)
    【解决方案3】:

    我的同事 Beni 发现了一个聪明的解决方案来删除所有现有的 TinyMCE:

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

    【讨论】:

      【解决方案4】:

      这是我正在使用的,并且看起来工作正常:

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

      【讨论】:

        【解决方案5】:

        TinyMCE V5

        删除所有实例:

        tinymce.remove();
        

        更多信息见this

        【讨论】:

          【解决方案6】:

          您可以在 javascript 的 onload 函数或先前实例的保存表单中使用这些行

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

          其中 id 是存在 tinyMce 的 textarea 或输入的 id

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-07-28
            • 2012-07-26
            • 2017-03-09
            • 1970-01-01
            • 2013-10-24
            • 1970-01-01
            • 1970-01-01
            • 2022-08-14
            相关资源
            最近更新 更多