【问题标题】:wp_editor Tiny MCE getContent doesn't return content of HTML viewwp_editor Tiny MCE getContent 不返回 HTML 视图的内容
【发布时间】:2012-12-10 08:49:37
【问题描述】:

我在我正在开发的插件中使用 wp_editor,并注意到如果 .getContent() 在 HTML 视图中(与可视化编辑器相反),它不会获取编辑器的内容。

如果编辑器在 HTML 视图中加载,它将返回

    tinyMCE.get(inputid) is undefined

但即使我尝试通过以下方式获取内容:

    jQuery("#"+inputid).html() or jQuery("#"+inputid).val()

它返回空值。更让我困惑的是,如果编辑器以可视模式加载,切换到 HTML 视图,进行一些更改,然后使用 .getContent() 它将在进行任何更改之前返回可视编辑器的值。

我正在用这个拔出我有限的头发供应,因此我们将不胜感激!

【问题讨论】:

    标签: jquery wordpress tinymce


    【解决方案1】:

    我也在为同样的问题而苦苦挣扎。原因是可视选项卡中的编辑器是 tinyMCE,而 html 选项卡中的编辑器只是一个纯文本区域。不知何故,当 html 选项卡处于活动状态时,tinyMCE 编辑器未激活,因此您需要改为查询 textarea。 textarea 将 id 传递给 wp_editor() 函数。您可以使用传统的 jquery 方法对其进行查询。

    例如,此代码设置一个名为 content 的变量,如果它被激活,则使用 tinyMCE 编辑器的内容;如果 tinyMCE 没有返回任何内容(因为选择了 HTML 选项卡),则使用 textarea 的内容:

    var content;
    var editor = tinyMCE.get(inputid);
    if (editor) {
        // Ok, the active tab is Visual
        content = editor.getContent();
    } else {
        // The active tab is HTML, so just query the textarea
        content = $('#'+inputid).val();
    }
    

    【讨论】:

    • 天啊,我在想同一页面上的多个 wp_editor 有问题。但我的所有编辑器都处于 HTML 模式。你的回答很有帮助!提示:使用tinymce.editors,您可以获得页面上所有活动的tinymce 编辑器。
    【解决方案2】:

    为了让它 100% 工作,我必须这样做:

    function get_tinymce_content(id) {
        var content;
        var inputid = id;
        var editor = tinyMCE.get(inputid);
        var textArea = jQuery('textarea#' + inputid);    
        if (textArea.length>0 && textArea.is(':visible')) {
            content = textArea.val();        
        } else {
            content = editor.getContent();
        }    
        return content;
    }
    

    【讨论】:

    • 试过很多其他的,但这是对我有用的!感谢分享!
    【解决方案3】:

    这是我正在使用的功能,从未让我失望。

    如果 TinyMCE 还没有加载,它真的很简单并且可以工作。 它只是检查包装器的类,这是非常安全的东西。


    function get_tinymce_content(id) {
    
        if (jQuery("#wp-"+id+"-wrap").hasClass("tmce-active")){
            return tinyMCE.get(id).getContent();
        }else{
            return jQuery("#"+id).val();
        }
    
    }
    

    【讨论】:

    • 这是所有解决方案中效果最好的。赞成。
    【解决方案4】:

    您需要致电tinyMCE.triggerSave(); jQuery("#"+inputid).html() 之前将产生实际的编辑器内容。

    (顺便说一句。'html 视图'是什么意思?)

    【讨论】:

    • 对不起,我忘了提到我也尝试过 triggerSave(),结果相同。在 WP 编辑器中,您可以在标准(微型 MCE 编辑器)和 html 视图之间切换选项卡,这允许您在没有所见即所得编辑器的情况下编辑 HTML。
    • 嗯,对不起,我对 WP 不太熟悉
    【解决方案5】:

    您可以像这样检查活动标签:

    let content;
    const editor = tinyMCE.get(inputid);
    if (null !== editor && false === editor.hidden) {
        // Ok, the active tab is Visual
        content = editor.getContent();
    } else {
        // The active tab is HTML, so just query the textarea
        content = $('#'+inputid).val();
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多