internetexplorer可替代document.execCommand(“insertText”,..),用于用
internet explorer alternative to document.execCommand("insertText",...), for text insertion that can be undone/redone by the user
当用户编辑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.selection
和TextRange
对象在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
- 将函数的上下文应用于javascript变量
- keyup事件处理程序更改焦点不适用于快速键入
- JQueryhide()不适用于Mozzilla,但适用于Chrome
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- PHP中的setcookie仅适用于localhost
- 包括用于facebook评论框的JavaScript SDK
- 如何检测用于WebGL的专用或集成显卡
- ng更改事件不适用于Dropdown
- 用于搜索的聚合物嵌套绑定
- jQuery表单添加不适用于下拉列表
- Rails/JSON:如何将JSON用于jquery UI自动完成表单
- JS编译器/包管理器,用于版本控制
- 将CSS应用于printWindow.print();在Javascript中
- 用于'魔术串'属性
- 用于检查数组中是否存在元素的javascript自定义方法
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 在ajax成功后,cluetip不适用于首次点击活动元素
- D3.js模式不适用于弧形或圆环图
- AngularJS单选筛选不适用于Name、Description和Field4复选框值
- internetexplorer可替代document.execCommand(“insertText”,..),用于用