4

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

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

    tinyMCE.get(inputid) is undefined

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

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

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

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

4

5 回答 5

5

我正在努力解决同样的问题。原因是可视选项卡中的编辑器是 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();
}
于 2013-05-14T14:37:22.840 回答
5

为了让它 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;
}
于 2014-03-24T18:04:03.483 回答
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();
    }

}
于 2016-12-28T13:57:14.260 回答
2

您需要调用tinyMCE.triggerSave(); beforejQuery("#"+inputid).html()将产生实际的编辑器内容。

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

于 2012-12-10T09:55:20.203 回答
0

您可以像这样检查活动选项卡:

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();
}
于 2021-02-19T18:15:34.893 回答