我正在制作一个小的
javascript编辑器(对于Chrome扩展),有点像SO上的.
有一个工具栏来处理textarea中的文本. (例如,用某些模板围绕所选文本)
我想知道是否有一个简单的方法来实现这一点,目前使用系统撤消/重做时,它会混淆文本(我认为系统只跟踪编辑之间的三角洲).
解决方法
您可以模拟textInput事件来操作textarea的内容.这样做的改变是通过撤消/重做来尊重的,我想(我知道他们在Safari中)
var element = document.getElementById('someTextarea'); var text = 'This text will be inserted in the textarea'; var event = document.createEvent('TextEvent'); event.initTextEvent('textInput',true,null,text); element.dispatchEvent(event); // fire the event on the the textarea
基本上,文本被插入,好像你自己粘贴了.所以如果选择了某些东西,它将被替换为文本.如果没有选择,文本将被插入插入符号的位置.并且撤消/重做应该正常工作(一次删除/重做整个插入的字符串),因为浏览器就像您自己键入/粘贴一样.
正如我所说,我知道这在Safari中具有撤销/重做的魅力,所以我认为它也适用于Chrome.