使用Dom的Range对象处理chrome和IE文本光标位置
2016-06-13 15:20
148 查看
有这样一段js:
那么在IE中是没有问题的,如:textArea它是可以创建出createTextRange对象的。那么下面的三句就是让当前的鼠标“光标”停留在num的位置(可以查询相关的资料)。这段代码你可选择在click中去触发。
也可以在focus中触发,这个时机你可以自己控制。
同样的效果在chrome中可以使用:
来设置光标的位置,当然chrom中是不支持createTextRange方法的,当然也有其它的方式去实现,这里不做介绍。。。
那么问题来了,如果你选择在HTML元素的click事件中去触发那么你是幸运的,可以做到和IE的效果没有任何的不同。但如果你一定要在focus中去触发,那么完蛋了,该发生的效果并没有发生!
经过尝试之后还是十分幸运的,我们可以绕过这个问题。浏览器在处理focus和click事件时的顺序是,先触发focus后出发click。那么我们就可以配合这两个方法去间接实现这个过程了。
提供简单的代码供参考:
var sel = obj.createTextRange(); sel.move('character', num); sel.collapse(); sel.select();
那么在IE中是没有问题的,如:textArea它是可以创建出createTextRange对象的。那么下面的三句就是让当前的鼠标“光标”停留在num的位置(可以查询相关的资料)。这段代码你可选择在click中去触发。
也可以在focus中触发,这个时机你可以自己控制。
同样的效果在chrome中可以使用:
obj.selectionStart = obj.selectionEnd = num;
来设置光标的位置,当然chrom中是不支持createTextRange方法的,当然也有其它的方式去实现,这里不做介绍。。。
那么问题来了,如果你选择在HTML元素的click事件中去触发那么你是幸运的,可以做到和IE的效果没有任何的不同。但如果你一定要在focus中去触发,那么完蛋了,该发生的效果并没有发生!
经过尝试之后还是十分幸运的,我们可以绕过这个问题。浏览器在处理focus和click事件时的顺序是,先触发focus后出发click。那么我们就可以配合这两个方法去间接实现这个过程了。
提供简单的代码供参考:
var focusStart = 0; document.getElementById('textArea的id').onclick = function () { if (focusStart) { moveEnd(this); focusStart = 0; } } document.getElementById('textArea的id').onfocus = function () { if (document.selection) { moveEnd(this); } else { focusStart = 1; } } function moveEnd(obj) { var len = obj.value.length; if (document.selection) { var sel = obj.createTextRange(); sel.moveStart('character', len); sel.collapse(); sel.select(); } else if (typeof obj.selectionStart == 'number' && typeof obj.selectionEnd == 'number') { obj.focus(); obj.selectionStart = obj.selectionEnd = len; } }
相关文章推荐
- JetBrains IntelliJ IDEA for Mac 15.0 破解版 – Mac 上强大的 Java 集成开发工具
- 机器学习笔记:神经网络
- android2.3.4----5.ov9650驱动分析--附clk设置
- SlidingMenu 在 Android 5.0 上不能刷新界面的bug解决方法
- Android多行文本折叠演示
- Git同步原始仓库到Fork仓库中
- delphi 浮点数float转换成十六进制字符串的方法(FloatToHex)
- JetBrains IntelliJ IDEA for Mac 15.0 破解版 – Mac 上强大的 Java 集成开发工具
- Linux-SVN 常用命令详解
- C++和双重检查锁定模式(DCLP)的风险
- centos gitlab安装
- Python - 标准库的使用方法
- Linux学习笔记(1)
- android2.3.4----4.hal与framebuffer的交互
- ES是如何实现节点容灾的
- Android Studio混淆方法
- Linux下GitLab的快速安装以及备份
- instruments 静态分析常见问题
- Attribute "resource" must be declared for element type "mapper".
- NN & SN & DN