Javascript internet explorer替代document.execCommand(“insertText”和…),用于用户可以撤消/重做的文本插入

Javascript internet explorer替代document.execCommand(“insertText”和…),用于用户可以撤消/重做的文本插入,javascript,internet-explorer,contenteditable,undo-redo,Javascript,Internet Explorer,Contenteditable,Undo Redo,当用户编辑一个contenteditable div并按下一些键时,我想覆盖默认行为。 例如,我想在用户按ENTER键时插入一个普通换行符。 我使用document.execCommand(“insertText”,…) 这是迄今为止我发现的唯一一种方法,可以让用户将此操作可撤消和可重做 <div id="editor" contenteditable="true" style="white-space:pre-wrap"> Some text.... </div> &

当用户编辑一个
contenteditable div
并按下一些键时,我想覆盖默认行为。 例如,我想在用户按ENTER键时插入一个普通换行符。 我使用
document.execCommand(“insertText”,…)

这是迄今为止我发现的唯一一种方法,可以让用户将此操作可撤消可重做

<div id="editor" contenteditable="true" style="white-space:pre-wrap">
Some text....
</div>

<script>
$("#editor").keydown(function(evt){
    console.log(evt.keyCode);
    if(evt.keyCode==13){
        document.execCommand("insertText",false,"\n");
        evt.preventDefault();
        evt.stopPropagation();
    }
}
</script>

一些文字。。。。
$(“#编辑器”).keydown(函数(evt){
console.log(evt.keyCode);
如果(evt.keyCode==13){
document.execCommand(“insertText”,false,“\n”);
evt.preventDefault();
evt.stopPropagation();
}
}
这段代码在chrome和firefox上运行良好。但是,ie不支持“插入文本”。是否有一种方法可以通过ie插入文本,这样用户就可以撤消它?

ie 11有新的和命令

我试图用这些为IE 11创建一个有效的解决方案,但失败了。在DOM范围和选择中插入换行符很困难;在IE中使用其遗留的
文档可以更容易地完成。选择
和对象,但不幸的是IE 11删除了
文档。选择
(但奇怪的是,不是TextRange)这使得它变得很困难。在编写了一个令人讨厌的解决方法来从所选内容创建TextRange之后,撤消仍然不起作用。下面是我所做的:

我决定使用DOM范围和选择对象进行另一次尝试。换行插入代码是说明性的,不应该用于任何严肃的事情,因为它需要添加一个非换行空格,以便将插入符号放在某个地方(尝试将其直接放在

之后不起作用).Undoing会删除插入的内容,但遗憾的是不会移动插入符号


您始终可以使用更简单、更稳定的方法捕获输入div上的更改事件,并根据自己的喜好更改输入字符串中的最后一个字符

我想是为了这个目的而发明的:)


改变你的天使,你就会看到一个全新的世界:3

你关心哪些版本的IE?IE 11有开始/结束可撤消的操作命令,但以前的版本没有。@TimDown,欢迎与我目前的情况相比有任何改进:)当然,如果它也适用于旧版本的IE会更好,但ie11总比没有好。@TimDown,请发布您的答案。这会很有帮助的。我试过了,但失败了。对于DOM范围和选择,插入换行符很困难;您可以在IE中使用其遗留选择和TextRange对象更轻松地执行此操作,但IE 11删除了IE的遗留选择对象
document.selection
,这使操作变得困难。此外,在编写了一个令人讨厌的解决方法之后,“撤消”无论如何都不起作用。这是我做的工作:这是另一次尝试。换行符插入非常糟糕,需要添加一个非换行的空格,以便插入符号(尝试将其直接放在

之后不起作用)。撤消某种工作,但不移动插入符号。我试过这种方法。但当我按Ctrl+Z组合键时,它就不起作用了。