要实现修改后撤消操作,可以使用浏览器提供的UndoManager接口。
首先,在设置div的contenteditable属性为true之前,需要给div加上一个contenteditable的包裹元素,用于管理撤消和重做操作,例如:
<div id="container"> <div id="editable-div" contenteditable="true"></div> </div>
然后,获取包裹元素,并创建一个UndoManager实例,将其与包裹元素进行关联,同时监听包裹元素的“input”事件,记录修改操作,如下所示:
const container = document.getElementById("container"); const editableDiv = document.getElementById("editable-div"); // 创建 UndoManager 实例并关联包裹元素 const undoManager = new UndoManager(); undoManager.setCallback(() => { updateUndoRedoState(); }); // 监听 input 事件,记录修改操作 container.addEventListener("input", () => { undoManager.add({ undo: () => { editableDiv.innerHTML = undoManager.undo(); }, redo: () => { editableDiv.innerHTML = undoManager.redo(); } }); }); function updateUndoRedoState() { // 根据 UndoManager 实例的状态更新 Undo 和 Redo 按钮的状态 }
最后,需要实现一个方法用于更新撤消和重做按钮的状态,根据UndoManager实例的状态进行更新即可。
这样就可以实现修改后的撤消操作了。