【问题标题】:Getting WP Tinymce's Content获取 WP Tinymce 的内容
【发布时间】:2011-04-22 19:35:11
【问题描述】:

我正在尝试编写一个 Wordpress 插件。我将在 WP 的 Tinymce 编辑器中获得计数单词。 基本上,它是一个字数计数器,可以计算您的帖子的长度并在元框中为您提供此消息

您的帖子有 450 个字

我唯一的问题是通过 javascript 从 Tinymce 获取单词。这不起作用:

document.getElementById('content')

Tinymce 的内容 id 是 content 。但是这段代码返回 NULL。我找不到 Tinymce 的有效 ID 名称。

很快,其他所有代码都准备好了,只是我无法从 Wordpress 的所见即所得编辑器中获取文字。

谢谢。

【问题讨论】:

    标签: javascript wordpress tinymce wysiwyg


    【解决方案1】:

    试试:

    tinymce.activeEditor.getContent();
    

    tinymce.editors.content.getContent();
    

    其中“内容”是您的文本区域的 id。

    同样,如果您只想在 TinyMCE 文本区域中获取选定(突出显示)的文本,您可以这样做:

    tinymce.activeEditor.selection.getContent();
    

    完整的 API 在这里:http://tinymce.moxiecode.com/wiki.php/API3:class.tinymce.Editor

    TinyMCE 还提供了许多您可以绑定的事件,特别是在您的情况下是 keyupkeydownkeypressed 事件。

    确保只有在 TinyMCE 加载到页面后才调用这个东西。

    【讨论】:

    • 完美运行!我不敢相信它是如此简单。
    • 正如 savitas 在下面的回答中提到的那样,这些解决方案不适用于所有自定义编辑器 - 特别是如果您的 ID 中有连字符。虽然这不是一个 tinymce 问题,只是 javascript 的工作方式,它可能会给您带来一些麻烦。 Savitas 的回答是使用“编辑器”作为数组来代替:tinymce.editors['content_id'].getContent();
    • 我注意到有时 wordpress 还没有注册给定的 tinymce 编辑器。此外,wordpress 有 js 函数 removep() 和 autop() 可以删除和添加各种实体,例如 tinymce.getContent() 喜欢添加的

      。而是尝试使用wp.editor.getContent('content')。关于它的文档不多,但我发现它准确地返回了将存储在数据库中的内容。

    【解决方案2】:

    我记得微型 MCE 从 ajax 动态加载内容,所以也许您的 document.getElementById('content') 尝试过早获取该元素。

    我认为你有两种方法可以解决这个问题:

    1) 使用事件监听器等待 ajax 事件完成,然后获取元素及其文本。

    2) 使用 tinyMce 函数获取文本区域的内容。在这里您可能会找到一些有用的提示: http://tinymce.moxiecode.com/wiki.php/How-to_load/save_with_Ajax_in_TinyMCE

    【讨论】:

    • 谢谢你,Manuel,现在我试试看 :)
    【解决方案3】:

    接受的答案确实对我有用,但对于一个页面上的多个编辑器,我必须通过编辑器 ID 访问它,所以在下面

    tinymce.editors['content_id'].getContent();

    为我工作。

    【讨论】:

      【解决方案4】:

      这是一个例子。无论按键是在 Visual 模式还是 HTML 模式下,编辑器下方的文本都会更新。

      可视模式 php文件中的事件:

      function my_tiny_mce_before_init( $init ) {
          $init['setup'] = "function( ed ) { ed.onKeyUp.add( function( ed, e ) { repeater( e ); }); }";
          return $init;
      }
      add_filter( 'tiny_mce_before_init', 'my_tiny_mce_before_init' );
      


      HTML 模式 javascript 文件中的事件:

      jQuery( document ).ready( function( $ ) {
      
          $('<div id=look-at-it></div>').insertAfter('#postbox-container-1');
      
          $('#content').on('keyup', function( e ) {   
              repeater( e );
          });
      });
      
      
      var repeater = function ( e ) {
          var targetId = e.target.id;
          var text = '';
      
          switch ( targetId ) {
      
               case 'content':
                   text = jQuery('#content').val(); 
                   break;
      
               case 'tinymce':
                   if ( tinymce.activeEditor )
                       text = tinymce.activeEditor.getContent();
                   break;
          }
      
          jQuery('#look-at-it').html( text );
      }
      



      测试日期:

      • WordPress 3.4.2

      【讨论】:

        【解决方案5】:

        这对我有用:

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

        其中 text 是 tinymce 编辑器的 ID

        【讨论】:

        • 传递参数格式:html,意味着我得到了实际的 html - 而不是转义 <p>
        【解决方案6】:

        在我测试的每一种情况下,这似乎都对我有用。不管我们是从文本模式还是视觉模式开始,也不管之后改变模式和添加更多内容。

        if ( tinyMCE.editors['id-of-your-editor'] ) {
            tinyMCE.editors['id-of-your-editor'].save();
            tinyMCE.editors['id-of-your-editor'].load();
            var your_content = tinyMCE.editors['id-of-your-editor'].getContent();
        } else if ( document.getElementById( 'id-of-your-editor' ) ) {
            var your_content = document.getElementById( 'id-of-your-editor' ).value;
        } else {
            alert ( 'Error' );
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多