如何使用js进行更改后使可信的div可逆?

Rad*_*eng 4 html content-editor contenteditable

当我错误地删除了contenteditable div中的一些文本时,我可以用它来反转它Ctrl + z.

但是在我用javascript做了一些改变之后.我不能Ctrl + z用来扭转以前的变化.

例如,当我将节点添加到所选文本时,<p>或者<h1>,我无法将内容反转为之前的更改. jsfiddle.net/NfGM3/ (编码不好,因为我是新手window.getSelection())

我使用div而不是textarea,因为我想在内容中添加一些节点.

那么,在使用js进行更改后,如何才能使其在可信的div中可逆?

TGH*_*TGH 6

如何添加一个keyup事件处理程序,它将在每个keyup之后跟踪当前文本.然后,您可以陷阱Ctrl+ Z并恢复到以前的内容,如果你检测Ctrl+ Z已经被按下.您可以在阵列中保留修订以支持一系列Ctrl+ Z操作.

  • +1,除了可能值得处理 keyup 以外的其他事情(发生得太频繁,数组变得太大,撤消的步骤太多)。IMO:keyup 触发类似于 1000 毫秒的设置超时(始终分配给相同的变量,因此只有一个变量在运行),并带有回调以将当前状态推送到数组中。结果:任何间隔小于 1 秒的连续击键只创建一个历史快照,而不是每次击键一个。 (3认同)
  • 好的(可用的)撤消管理器(因为这就是您要实现的意思)并不像您想的那样容易实现。检查例如 CKEditor 的 [undoManager](https://github.com/ckeditor/ckeditor-dev/blob/master/plugins/undo/plugin.js) 并注意有很多地方会触发“保存快照”操作。 (2认同)