internetexplorer可替代document.execCommand(“insertText”,..),用于用

internet explorer alternative to document.execCommand("insertText",...), for text insertion that can be undone/redone by the user

本文关键字:insertText 用于 document execCommand internetexplorer      更新时间:2023-09-26

当用户编辑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>

此代码在chrome和firefox上运行良好。但是,ie不支持"inserttext"。有没有办法用ie插入文本,这样用户就可以撤消了?

IE 11有新的ms-beginUndoUnit和ms-endUndoUnit命令。

我尝试使用这些为IE 11创建一个工作解决方案,但失败了。使用DOM范围和选择很难插入换行符;您可以使用其遗留的document.selectionTextRange对象在IE中更容易地做到这一点,但不幸的是,IE 11删除了document.selection(但奇怪的是,没有删除TextRange),这使它变得困难。在编写了一个讨厌的变通方法来从所选内容创建TextRange之后,撤消无论如何都不起作用。以下是我所做的:

http://jsfiddle.net/E7sBD/2

我决定再次尝试使用DOMRange和选择对象。换行插入代码是说明性的,不应该用于任何严重的情况,因为它涉及添加一个不间断的空格来给插入符号一个位置(试图将其直接放在<br>之后不起作用)。撤消操作确实会删除插入的内容,但遗憾的是不会移动插入符号。

http://jsfiddle.net/E7sBD/4/

您总是可以采用更简单、更稳定的方式来捕捉输入div上的更改事件,并根据自己的喜好更改输入字符串中的最后一个字符。

http://api.jquery.com/change是为了这个目的而发明的:)

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