2011-12-17 28 views
5

Sto lavorando su un div contenteditable per creare un semplice editor RichText. Uno dei requisiti che ho è di poter inserire un chunk html nella posizione del cursore su un evento button.Un `range.insertNode` può essere annullato utilizzando l'annullamento del browser, in un div contenteditable?

sono stato in grado di ottenere quella parte che funziona benissimo utilizzando range, selection, range.insertNode(nodeHTML) o range.pasteHTML(nodeHTML) basata su browser. Ma non ho potuto ottenere due cose, che idealmente mi piacerebbe avere

  1. Per essere in grado di annullare il nodo inserito, utilizzando l'annullamento del browser. In qualche modo, il browser ignora le azioni precedenti.
  2. Per spostare il cursore alla fine del nodo inserito. Modo che l'utente può iniziare a scrivere dopo

So che posso usare qualcosa di molti editori disponibili, che fa molto bene, ma se ho questa che non avrebbe dovuto. Qualsiasi aiuto o anche suggerimenti sono i benvenuti.

Grazie.

+0

Questo potrebbe aiutarti: http://code.google.com/p/rangy/ - Inoltre, dai un'occhiata alle demo. – techfoobar

+0

Purtroppo Rangy non ha funzionalità di annullamento. –

risposta

8

risposta riscritta agosto 2013

Purtroppo non

, anche se le cose stanno migliorando. Le mutazioni DOM programmatiche diverse da quelle attivate da document.execCommand() non vanno nello stack di annullamento incorporato del browser. Tuttavia, ci sono stati due recenti sviluppi:

Fino a quando la situazione migliora, si potrebbe usare document.execCommand("InsertHTML", false, "<b>Some html</b>");, ma questo non è supportato in IE.

+0

Immagino che gli utenti di IE debbano fare a meno di annullare quindi. L'utilizzo di 'insertHTML' è la soluzione a entrambi i miei problemi. Grazie. E a proposito, il tuo rangy è impressionante. – simplyharsh

+1

Sembra che Microsoft potrebbe essere la prima a fare qualcosa per questo problema; IE 11 ha i comandi * ms-beginUndoUnit * e * ms-endUndoUnit * che raccolgono tutte le modifiche DOM che si verificano tra l'utilizzo dei due, spingendoli allo stack di annullamento come un singolo passo di annullamento. –

+1

@AndyE: Oo, non lo sapevo. Buone notizie, anche se preferirei che avessero implementato le specifiche. –

Problemi correlati