2011-07-18 18 views
5

Tengo un editor de texto enriquecido en un iframe con designMode que resalta la sintaxis para pequeños bloques de texto. Me gustaría actualizar el resaltado en la tecla, pero jugar con el DOM hace que el marco se desdibuje, por lo que cada vez que presionas una tecla, el cursor desaparece y ya no puedes escribir. Eso no sería un problema si el analizador pudiera recordar dónde está la intercalación, y luego vuelva a enfocar el marco flotante y reemplace la intercalación. He leído en getSelection() y sus parientes, pero al parecer onkeyup elimina la selección, al menos en Chrome - llamando al getSelection() dentro de una onkeyup siempre produce una selección nula. ¿Hay alguna forma de evitar esto?Guardar una selección para su uso posterior en JS

Esto es lo que tengo:

<iframe> 
    <html> 
     <head> 
      <script> 
       function parse() { 
        if(window.getSelection().type != 'None') { 
         var range = window.getSelection().getRangeAt(0); 
        } 
        var text = document.body.textContent; 
        //Parse text, output is stored in newtext 
        document.body.innerHTML = newtext; 
        document.body.focus(); 
        if(range) { 
         window.getSelection().removeAllRanges(); 
         window.getSelection().addRange(range); 
        } 
       } 
      </script> 
     </head> 
     <body onload="document.designMode = 'on'; document.onkeyup = parse;"> 
      Text entered appears here 
     </body> 
    </html> 
</iframe> 
+0

qué editor está usando? ¿Es este uno existente o uno tuyo? –

+1

¿Es esto solo para los navegadores Gecko? Deberías realizar pruebas de funciones más de lo que eres. ¿De dónde viene el objeto * wind * en 'addRange (wind.range)'? – RobG

+0

Este es un editor que estoy escribiendo en Chrome, aunque ideal para todos los navegadores (excepto IE). En cuanto al viento, mi error: el viento solía mantener el objeto de la ventana para el iframe antes de darme cuenta de que sería más fácil tener la función dentro del mismo marco. Eliminado de arriba; no debería haber estado allí aunque no fue el error. – Monchoman45

Respuesta

0

recomendaría utilizar algún otro rotulador código. Como CodeMirror por ejemplo.

+0

Ese script no parece hacer lo que necesito, tengo mi propio analizador que me gustaría usar. El problema aquí es que necesito saber si es posible guardar un rango en un oyente onkeyup, o si hay una mejor manera de lograrlo. – Monchoman45

Cuestiones relacionadas