2011-12-29 18 views
6

He creado un complemento para tinyMCE para insertar en el editor fórmulas matemáticas usando MathJax. Este complemento abre una ventana emergente en un iframe (usando jQuery) y luego inicia un evento trigger - on para insertar la fórmula ingresada en el editor tinyMCE activo.tinymce.selection.setContent inserta el texto al comienzo del área de texto en IE

Mi código funciona correctamente en Chrome & Firefox (crea un pre que se inserta en la posición de intercalación del área de texto), pero en IE el texto se inserta en el comienzo del área de texto.

estoy usando el método setContent así:

tinyMCE.activeEditor.selection.setContent(text to insert, {format: 'bbcode'}); 

He intentado utilizar ed.focus() antes de insertar y otras recomendaciones contenidas en StackOverflow pero nada funcionó para mí.

Además, traté de guardar la posición de intercalación antes de abrir la ventana emergente y restaurarla al insertarla pero no funcionó de todos modos.

¿Alguna idea?

Gracias de antemano.

Respuesta

6

resuelto:

Yo sé que no es la solución más elegante, pero funciona para mí.

Antes de abrir la ventana emergente inserto un "lapso" con y el ID específico de la siguiente manera:

var sel = tinyMCE.activeEditor.selection; 
sel.setContent('<span id="_math_marker">&nbsp;</span>'); 

Entonces, cuando se cierra el popup y el texto se envía de nuevo al editor, busco el lapso de el marcador luego seleccionarlo y llamar setContent:

var ed = tinyMCE.activeEditor; 
var marker = ed.dom.get('_math_marker'); 
ed.selection.select(marker, false); 
ed.selection.setContent("TEXT TO INSERT"); 

Esto funciona para todos los navegadores! Recuerde eliminar el lapso si la ventana emergente está cerrada sin insertar nada para evitar dejar basura en el editor.

:-)

0

intentar algo como esto:

 

var myField = tinyMCE.get("SMSBody"); 

    //IE support 
    if (document.selection) { 

     myField.focus(); 
     sel = document.selection.createRange(); 
     sel.text = fieldName; 
    } 
else if (document.getSelection) { 

     tinyMCE.activeEditor.selection.setContent(fieldName); 
     myField.focus(); 
    } 
 

Espero que funcione para usted.

+0

No funciona :(Ahora estoy tratando de guardar la posición antes de abrir la ventana emergente. Lo actualizaré lo antes posible. Gracias :) – vfportero

0

Hola Usé uno de los plugins de jQuery llamado jCaret para este tipo de situación. Funcionó perfectamente en la mayoría de los navegadores utilizados habitualmente (IE 7,8,9 con modo de compatibilidad también).

Tener un vistazo a los ejemplos dados en el siguiente enlace

jCaret

Gracias

+0

Voy a echar un vistazo a su consejo. ¡Gracias! – vfportero

1

Simplemente quite el.parte de selección, por lo que el código debe ser similar

tinyMCE.activeEditor.setContent(text to insert, {format: 'bbcode'});

1

En IE8 en cant get editor activo, por lo que deben centrarse, a fin de utilizar

tinyMCE.activeEditor.focus();

Espero que te sirva.

Cuestiones relacionadas