将文本插入到TinyMCE文本编辑器中的光标位置

时间:2013-07-10 作者:David Gard

我有一个小功能,允许用户单击文本区域下的按钮,并插入相关文本(这与jQuery配合使用textrange 插件)。

然而,因为我在插件中使用的是TinyMCE编辑器,所以它只能在“文本”模式下工作,而不能在“视觉”模式下工作。

我已经查看了源代码,但不知道如何使其同时适用于这两种情况。有人知道在“视觉”模式下如何将文本插入编辑器吗?谢谢

$(document).ready(function(){

    var button_text = {} // The text to insert for each button click

    button_text[\'insert_event_name\']            = \'event_name\';
    button_text[\'insert_event_date\']            = \'event_date\';
    button_text[\'insert_event_start_time\']      = \'event_start\';
    button_text[\'insert_event_finish_time\']     = \'event_finish\';
    button_text[\'insert_event_location\']        = \'event_location\';
    button_text[\'insert_event_address_inline\']  = \'event_address_inline\';
    button_text[\'insert_event_address_blick\']   = \'event_address_block\';

    $(\'.inserter\', \'#event-desc-container\').on(\'click\', function(){

        var button = $(this).attr(\'name\'),
            text = \'[\'+button_text[button]+\']\',
            textarea = $(\'textarea#event_desc\', \'#event-desc-container\');

        /** Get the location (start position) of where the cursor is in the textarea */
        var start = textarea.textrange(\'get\', \'start\');

        /** Add the relevent button text to the start position */
        textarea.textrange(\'replace\', text).trigger(\'updateInfo\').focus();

        /** The newly added text will be selected, so work out the end position of that selection */
        var end = textarea.textrange(\'get\', \'end\');

        /** Move the cart to the end position, so that no text is highlighted */
        textarea.textrange(\'set\', end, 0).trigger(\'updateInfo\').focus();

    });

});

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

为了测试这一点,我在后期编辑/新建屏幕上的另一个元框中添加了一个按钮id 属于addtxtbtn. 在…上click, 我抓住了textareas在#wp-content-editor-container, 这是默认WP Editor实例的默认包装。如果有不同的标记,可能需要更改此选项。其余部分取自demo on GitHub - 如果这就是你所说的插件。

( function($) {
    $( \'#addtxtbtn\' ).on( \'click\', function( e ) {
        e.preventDefault();
        var textarea = $( \'#wp-content-editor-container\' ).find( \'textarea\' );
        textarea.bind( \'updateInfo keyup mousedown mousemove mouseup\', function() {
            var range = $( this ).textrange();
            console.log( range );
        } );
    } );
} )( jQuery );
简而言之:在“文本”中添加文本-textarea, 执行以下操作:

$( \'#wp-content-editor-container\' ).find( \'textarea\' ).val( \'Some default Text\' );
要向“TinyMCE”/“Visual”编辑器添加文本,请执行以下操作:

tinyMCE.activeEditor.execCommand( \'mceInsertContent\', false, \'Some default Text\' );
如果需要从TinyMCE获取内容,可以使用以下方法:

// Raw
tinyMCE.activeEditor.getContent( { format : \'raw\' } );
// HTML contents:
tinyMCE.activeEditor.getContent();
要从特定TinyMCE实例获取内容(如果可能有多个实例),请使用:

tinyMCE.get( \'some-id\' ).getContent();

结束