javascript - Internet Explorer 替代 document.execCommand ("insertText",...),用于用户可以撤消/重做的文本插入

标签 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>

<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-beginUndoUnitms-endUndoUnit命令。

我尝试使用它们为 IE 11 创建一个可行的解决方案,但未能成功。使用 DOM 范围和选择很难插入换行符;您可以在 IE 中使用其旧版 document.selection 更轻松地做到这一点和 TextRange 对象,但不幸的是 IE 11 已删除 document.selection (但不是 TextRange,奇怪的是)这使得它变得困难。在编写了一个讨厌的解决方法以从选择中创建一个 TextRange 之后,撤消无论如何都不起作用。这是我所做的:

http://jsfiddle.net/E7sBD/2

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

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

关于javascript - Internet Explorer 替代 document.execCommand ("insertText",...),用于用户可以撤消/重做的文本插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20124212/

相关文章:

javascript - 形成多个复选框,限制可以选择的数量

internet-explorer - 404 页面未显示在 IE9 中

html - 为什么 colgroup/col 在 Chrome 中不起作用

css - 在 IE 中使用 HTML5 Boilerplate 的滚动问题

javascript - 列表后的 HTML5 内容可编辑段落

javascript - javascript静态类继承非静态类的表现

javascript - 是否可以使用 jquery 创建真正的下拉火灾处理程序?

javascript - div onmouseover 在主 div 内的其他 div 上移动时丢失

javascript - 如何使用 webkit 浏览器选择范围内的节点?

javascript - 多个内容可编辑的 div : on Enter jumping downward and on Backspace- upward - Chrome