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


8

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

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

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

  2. $('#html_text_area_id').val(); -这是相反的,它似乎只能获取HTML编辑器的值。

我知道有更好的方法-我似乎找不到它...

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


2
当您启动TinyMCE的,通常你绑定它哟一个textarea因此只要使用的textarea的ID与jQuery的val()
Bainternet

是的,我已经尝试过了,但是它只能获取html编辑器的值。如果我在可视化编辑器中,请进行更改,然后尝试保存,无论我在可视化编辑器中所做的任何更改都不会保存。
山姆

Answers:


22

好的,显然,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();
    }
}

嗯,有趣的主意。我会对其进行测试并报告。谢谢!
山姆

1
工作完美。谢谢你的帮助!如果我有足够的声誉,我会投票赞成。
山姆

很高兴为您解决了这个问题,您可以接受正确的答案作为答案:)
Bainternet 2012年

2
为此花了很长时间才能找到答案。我还需要一种设置内容的方法。万一其他人也需要一种设置内容的方法,以下是这两个(获取/设置)功能的要点:gist.github.com/RadGH/523bed274f307830752c。这也适用于自定义wp_editor ID,而不仅仅是默认ID。
Radley Sustaire 2014年


1

那是我在提交表单之前添加到我的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();
    }
});

1

这为我工作:

if (jQuery("#wp-description-wrap").hasClass("tmce-active")){
    description1 = tinyMCE.activeEditor.getContent( { format : 'html' } );
}else{
    description1 = jQuery('[name="description"]').val();

其中description是tinymce编辑器的ID,在接受的答案的其他字符之后是de代码,对我不起作用。


请说明,它与接受的答案有何不同?什么新信息。您提供吗?
Fayaz

0

我需要更多代码才能使其正常运行,并且还遇到了JavaScript错误:Deprecated TinyMCE API call: <target>.onKeyUp.add(..)这是由将wordpress从3.x升级到4引起的clear my browser cache。因此,我必须首先这样做。

首先,我tiny_mce_before_init在functions.php文件中向wp过滤器添加了一个回调,这使我可以添加一个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函数可以在内容更改时执行所需的操作。使用wp_enqueue_scripts将此JavaScript添加到所需页面。

  /**
   * 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"),
) ); ?>

0

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

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();
    }

可视”选项卡具有一个类switch-tmce,您可以使用该类将其标识为选项卡。如果背景颜色较浅,您就会知道它已经聚焦。因此,您还可以使用它来确定两个选项卡中的哪个处于活动状态。

这是一种基于自适应解决方案Bainternet答案。可能还有其他更好的方法可以执行此操作,但是这种方法对我来说效果很好。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.