Javascript textarea撤消重做

Ato*_*ble 15 javascript google-chrome-extension

我正在制作一个小的javascript编辑器(用于chrome扩展),有点像SO上的那个.

有一个工具栏可以处理textarea中的文本.(例如用一些模板包围所选文本)

我想知道是否有一种简单的方法来实现这一点,目前在使用系统undo/redo时,它会混淆文本(我认为系统只跟踪编辑之间的增量).

Fla*_*ino 17

您可以模拟textInput事件来操纵textarea的内容.我认为(我知道他们在Safari中)使用undo/redo来尊重所做的更改

var element = document.getElementById('someTextarea');
var text = 'This text will be inserted in the textarea';
var event = document.createEvent('TextEvent');

event.initTextEvent('textInput', true, true, null, text);
element.dispatchEvent(event); // fire the event on the the textarea
Run Code Online (Sandbox Code Playgroud)

基本上,插入文本就像你自己粘贴一样.因此,如果选择了某些内容,它将被替换为文本.如果没有选择,则文本将插入插入符号的位置.undo/redo应该可以正常工作(一次性撤消/重做整个插入的字符串),因为浏览器就像你自己输入/粘贴一样.

正如我所说,我知道这在Safari中具有撤消/重做的魅力,所以我认为它也适用于Chrome.

  • 在 Firefox 中,您可以用“element.value = substring + data + substring;”替换文本区域值,并且撤消仍然有效 (2认同)
  • 从Chrome 53开始,此功能将无法使用,因为`document.createEvent`会创建不受信任的事件。参见:/sf/ask/2796351281/ (2认同)

小智 15

如果textarea具有焦点且其插入符号处于正确位置,

document.execCommand("insertText", false, "the text to insert");
Run Code Online (Sandbox Code Playgroud)

将插入文本"要插入的文本",保留浏览器的本机撤消堆栈.(请参阅正在进行的HTML编辑API规范.)Chrome 18支持此功能,但我不确定它的确切版本.


归档时间:

查看次数:

5804 次

最近记录:

6 年,7 月 前