在前端使用时,如何获取TinyMCE编辑器的输入?

时间:2012-02-17 作者:Sam

我不知道为什么我没有找到这个,但是有人知道如何获得TinyMCE编辑器的输入吗?我在前端使用它,希望能够将用户在TinyMCE中键入的任何内容保存到数据库中,但无法找到获取该值的最佳方法。

我成功实施的两个解决方案是:

  1. tinyMCE.activeEditor.getContent(); - 这一个似乎只获取可视化编辑器的值,因此如果我在HTML编辑器中进行更改然后保存,则不会获取它们。

  2. $(\'#html_text_area_id\').val(); - 这一个正好相反,它似乎只获得HTML编辑器的值。

    我知道有更好的方法-我就是找不到。。。

    p、 是的,我将实施安全措施,以确保人们不会炸毁数据库。

6 个回复
最合适的回答,由SO网友:Bainternet 整理而成

好的,显然WordPress会跟踪什么类型的编辑器(视觉或html)作为一个类被添加到内容包装器中,所以这里有一个解决方案,可以让您在编辑器中获得最新的内容

function get_tinymce_content(){
    if (jQuery("#wp-content-wrap").hasClass("tmce-active")){
        return tinyMCE.activeEditor.getContent();
    }else{
        return jQuery(\'#html_text_area_id\').val();
    }
}

SO网友:Philipp

这是我在提交表单之前添加到javascript中的代码。

// Find and loop through all TinyMCE editors.
jQuery(\'#the-form\').find( \'.wp-editor-area\' ).each(function() {
    var id = jQuery( this ).attr( \'id\' ),
        sel = \'#wp-\' + id + \'-wrap\',
        container = jQuery( sel ),
        editor = tinyMCE.get( id );

    // If the editor is in "visual" mode then we need to do something.
    if ( editor && container.hasClass( \'tmce-active\' ) ) {
        // Saves the contents from a editor out to the textarea:
        editor.save();
    }
});

SO网友:Alfredo Cebrián

这对我很有用:

if (jQuery("#wp-description-wrap").hasClass("tmce-active")){
    description1 = tinyMCE.activeEditor.getContent( { format : \'html\' } );
}else{
    description1 = jQuery(\'[name="description"]\').val();
其中,description(描述)是tinymce编辑器的ID,在接受答案的else(其他)后面的de代码对我不起作用。

SO网友:Daithí

我需要更多的代码才能让它工作,而且还遇到了一个javascript错误:Deprecated TinyMCE API call: <target>.onKeyUp.add(..) 这是由wordpress从3升级引起的。x到4。所以我不得不clear my browser cache 第一

首先,我向wp过滤器添加了一个回调tiny_mce_before_init 在我的功能中。php文件,这允许我添加一个js回调函数,以便在初始化编辑器时启动:

add_filter( \'tiny_mce_before_init\', array( $obj, \'filter_cb_mce_before_init\' ) );

/**
 * Filter cb to add event listeners to tinymce editor.
 * @param  array $init An array of setup js functions as strings.
 * @return array       Returns new array of js function strings.
 */
function filter_cb_mce_before_init( array $init ) {
        $init[\'setup\'] = "function(ed){
                if(get_tinymce_content)  //not required, I use it as flag to check if on correct page
                    ed.on(\'change\', function(){ get_tinymce_content() });
            }";
        return $init;
    }
接下来,使用javascript函数在内容更改时对其执行所需的操作。使用添加此javascriptwp_enqueue_scripts 转到所需页面。

  /**
   * Get the content of the tinyMCE editor.
   * @link http://wordpress.stackexchange.com/questions/42652/how-to-get-the-input-of-a-tinymce-editor-when-using-on-the-front-end
   * @return {string} Returns the content
   */
  function get_tinymce_content(){

    //change to name of editor set in wp_editor()
    var editorID = \'my_editor_id\';

    if (jQuery(\'#wp-\'+editorID+\'-wrap\').hasClass("tmce-active"))
        var content = tinyMCE.get(editorID).getContent({format : \'raw\'});
    else
        var content = jQuery(\'#\'+editorID).val();

    console.log(content);
}
当我使用以下命令将编辑器打印到任何页面时,代码都起作用:

<?php wp_editor( @$event->description, \'my_editor_id\', array(
    \'media_buttons\' => false,
    \'textarea_name\' => \'data[description]\',
    \'quicktags\'     => array("buttons"=>"link,img,close"),
) ); ?>

SO网友:Abel Melquiades Callejo

您可以根据编辑器的当前模式获取内容。

function get_tinymce_content()
    {
    if (jQuery(".switch-tmce").css(\'background-color\')==\'rgb(245, 245, 245)\')
        return tinyMCE.activeEditor.getContent();
    else
        return jQuery(\'#html_text_area_id\').val();
    }
TheVisual tab有一个类switch-tmce 可以将其标识为选项卡。如果背景颜色较浅,您就会知道它已经聚焦。因此,您还可以使用它来确定两个选项卡中的哪一个处于活动状态。

这是一个基于Bainternet\'sanswer. 可能还有其他更好的方法,但这一种对我来说很有效。

SO网友:Camille Descombes

您还可以使用addeditor 事件:

  /// Fires when an editor is added to the EditorManager collection.
  tinymce.on(\'addeditor\', function( event ) {
    var editor = event.editor;
    var $textarea = $(\'#\' + editor.id);
    console.log($textarea.val());
  }, true );

TinyMCE \'addeditor\' event documentation

结束

相关推荐

WP 3.3更新禁用的编辑器样式表?还是TinyMCE高级问题?

我有几个CMS网站使用TinyMCE高级插件和编辑器风格。css样式表使编辑器文本类似于网站文本。更新到WP 3.3后,编辑器不再在任何网站上使用样式表。这可能不是WP 3.3的问题:一旦我更新了WP,TinyMCE Advanced显示它需要更新,所以更新了。问题很可能出在最新版本的TinyMCE Advanced上。有关于为什么或如何修复的线索吗?虽然我仍然不知道问题是出在WP 3.3还是TinyMCE Advanced(我怀疑是后者),但我的函数中有以下函数。php文件启用编辑器样式表:// Add