2011-04-22 11 views
16

Estoy tratando de escribir un plugin para Wordpress. Voy a tener palabras recuentos que en el editor TinyMCE de WP. Básicamente, es un contador de palabra que contar mucho de su puesto y que le da este mensaje en una caja metaconseguir el contenido de WP tinymce

Tu entrada tiene 450 palabras

Mi acaba problema es conseguir palabras de tinymce a través de JavaScript. Esto no está funcionando: Identificación del

document.getElementById('content') 

del contenido de TinyMCE es contenido. Pero este código devuelve NULL. No pude encontrar el nombre de identidad válido para tinymce.

En poco tiempo, otros todos los códigos están listos, simplemente no puedo conseguir palabras de editor WYSIWYG Wordpress.

Gracias.

Respuesta

27

Probar:

tinymce.activeEditor.getContent(); 

o

tinymce.editors.content.getContent(); 

Donde "contenido" es el ID de su área de texto.

Del mismo modo, si desea obtener sólo el texto seleccionado (resaltado) en el área de texto TinyMCE que haría:

tinymce.activeEditor.selection.getContent(); 

La API completa está aquí: http://tinymce.moxiecode.com/wiki.php/API3:class.tinymce.Editor

TinyMCE también ofrece un montón de eventos a los que se puede vincular, particularmente en su caso los eventos keyup, keydown y keypressed.

Asegúrese de llamar esto solo después de que TinyMCE se haya cargado en la página.

+0

¡Funcionó a la perfección! No puedo creer que fuera tan simple. –

+0

Como se menciona en las soluciones de navegación que figuran a continuación, estas soluciones no funcionarán para todos los editores personalizados, especialmente si tiene guiones en la ID. Aunque no es un problema de tinymce, solo la forma en que funciona JavaScript, puede darte algunos problemas. La respuesta de Savitas es usar "editores" como una matriz en su lugar: 'tinymce.editors ['content_id']. GetContent();' –

4

recuerdo que pequeñas cargas MCE contenido dinámicamente a partir de Ajax, por lo que tal vez su document.getElementById('content') tratar de conseguir ese elemento demasiado pronto.

yo creo que hay 2 maneras de resolver este problema:

1) esperar a que el evento completition ajax, con un detector de eventos, y después de eso obtener el elemento y su texto.

2) use la función tinyMce para obtener el contenido de un área de texto. Aquí puede encontrar algunos consejos útiles: http://tinymce.moxiecode.com/wiki.php/How-to_load/save_with_Ajax_in_TinyMCE

+0

Gracias Manuel, ahora lo intentaré :) – Eray

4

respuesta aceptada trabajó para mí, sino para varios editores en una página que tengo que acceder a él a través de Identificación del editor, es abajo

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

trabajado para mí.

2

Aquí hay un ejemplo. El texto debajo del editor se actualizará si la copia ocurrió en modo Visual o HTML.

WP tinyMCE onKeyUp

Visual modo de evento en el archivo 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'); 


modo HTML evento en el archivo 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); 
} 



probado en:

  • WordPress 3.4.2
1

Esto funcionó para mí:

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

Dónde texto es el ID de la tinymce editor

+0

Al pasar el formato param: html, significaba que obtuve el html real - en lugar de escapar <p> – zak

0

Este es el que parece funcionar para mí en cada situación que probé. Independientemente de si comenzamos desde el modo de texto o en el modo visual e independientemente de cambiar los modos y agregar más contenido después de eso.

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'); 
} 
Cuestiones relacionadas