2011-12-17 23 views
5

Estoy trabajando en un div contenteditable para hacer un editor de RichText simple. Uno de los requisitos que tengo es poder insertar html chunk en la posición del cursor en un evento de botón.¿Se puede deshacer un `range.insertNode` usando la acción de deshacer del navegador, en un div satisfactorio?

que era capaz de conseguir que la parte de trabajo bien mediante el uso de range, selection, range.insertNode(nodeHTML) o range.pasteHTML(nodeHTML) basado en navegador. Pero no pude obtener dos cosas, que idealmente me gustaría tener

  1. Para ser capaz de deshacer el nodo insertado, usando la función de deshacer del navegador. De alguna manera, el navegador ignora las acciones anteriores.
  2. Para mover el cursor al final del nodo insertado. Para que el usuario pueda comenzar a escribir después de

Sé que puedo usar algo de muchos editores disponibles, lo cual hace esto muy bien, pero si lo consigo no tendría que hacerlo. Cualquier ayuda o incluso sugerencias son bienvenidas.

Gracias.

+0

Esto podría ayudarlo: http://code.google.com/p/rangy/ - Además, eche un vistazo a las demostraciones. – techfoobar

+0

Desafortunadamente Rangy no tiene funcionalidad de deshacer. –

Respuesta

8

respuesta reescrito de agosto de 2013

Desafortunadamente no

, aunque las cosas están mejorando. Las mutaciones programáticas de DOM distintas de las desencadenadas por document.execCommand() no van en la pila de deshacer integrada del navegador. Sin embargo, se han producido dos acontecimientos recientes:

Hasta que la situación mejore, puede usar document.execCommand("InsertHTML", false, "<b>Some html</b>"); pero esto no es compatible con IE.

+0

Supongo que los usuarios de IE tienen que pasar sin deshacer. El uso de 'insertHTML' es la solución a mis dos problemas. Gracias. Y, por cierto, tu rangy es impresionante. – simplyharsh

+1

Parece que Microsoft puede ser el primero en hacer algo al respecto; IE 11 tiene los comandos * ms-beginUndoUnit * y * ms-endUndoUnit * que recogen cualquier cambio de DOM que ocurra entre el uso de los dos, empujándolos a la pila de deshacer como un solo paso de deshacer. –

+1

@AndyE: Oo, no sabía de eso. Buenas noticias, aunque preferiría que hubieran implementado las especificaciones. –