2013-08-21 67 views
4

當我在contenteditable div中刪除了一些錯誤的文本時,我可以用Ctrl + z將其取消。如何使用js進行更改後可以使用contenteditable div?

但我做了一些改變與JavaScript。我不能使用Ctrl + z以反轉到以前的更改。

例如,當我將節點添加到所選文本(如<p><h1>)時,我無法將內容反轉爲以前的更改。 jsfiddle.net/NfGM3/ (壞的編碼,因爲我是新來window.getSelection()

我用DIV來代替textarea的,因爲我想添加一些節點到內容。

那麼,如何在使用js進行更改之後使其在contenteditable div中可逆?

+1

這通常不正確:除非您在關鍵事件處理中禁用了快捷鍵,否則Ctrl-Z在contenteditable中工作正常。見http://jsfiddle.net/68Mwf/ –

+0

Taht的權利!所以,我更新了我的問題。謝謝! –

回答

5

如何添加一個鍵盤事件處理程序,以便在每次鍵入後跟蹤當前文本。如果檢測到按Ctrl +ž已經按下然後,您可以陷阱按Ctrl +ž恢復到以前的內容。 您可能會保留修改數組以支持一系列操作。Ctrl + Z操作。

+2

+1,除了可能值得處理keyup以外的其他東西(經常發生,數組變得太大,需要撤消太多步驟)。 IMO:類似於1000ms settimeout的鍵盤觸發器(總是分配給相同的變量,因此不會有超過一個正在運行),用回調將當前狀態推入數組。結果:鍵入的所有連續擊鍵均小於1秒,只創建一個歷史快照,而不是每個擊鍵一個。 –

+1

好的(可用的)撤銷管理器(因爲這是你的意思實現)並不像你想的那麼簡單。檢查例如CKEditor的[撤銷管理器](https://github.com/ckeditor/ckeditor-dev/blob/master/plugins/undo/plugin.js),並注意到有很多地方觸發了「保存快照」操作。 – Reinmar

相關問題