js TextArea的选中区域处理


Posted in Javascript onDecember 28, 2010

(一)获取Textarea的选中区域起点或无选中时的输入光标位置

非IE浏览器,如,firefox,chrome,支持 selectionStart 获取选中区域的起点,而IE浏览器不支持该属性,需要间接通过TextRange来获得,利用TextRange对象的compareEndPoints方法来进行起点的比较可以实现。

getStartPos : function( textarea ) 
{ 
if ( typeof textarea.selectionStart != 'undefined' ) 
{ // 非IE 
start = textarea.selectionStart; 
} 
else 
{ // IE 
var range = document.selection.createRange(); 
var range_textarea = document.body.createTextRange(); 
range_textarea .moveToElementText(textarea); 
//比较start point 
for ( var sel_start = 0; range_textarea .compareEndPoints('StartToStart' , range) < 0; sel_start++) 
range_textarea .moveStart( 'character', 1); 
start = sel_start; 
} // else return start; 
}

但有点需要注意的是,在chrome下,如果textarea设为readonley,那textarea不会出现输入光标,返回的selectionStart与selectionEnd都为0.firefox下则正常。

(二)设置Textarea中选中的区域

类似的,非IE的浏览器支持setSelectionRange方法指定选中的字符范围,而IE不支持,也是通过TextRange来操作,这里需要注意的是IE下Textarea的选中区间的相对位置问题。如下面的代码是先moveStart,moveEnd把起点与终点都设为0,collapse移动生效后,起点不变,先moveEnd移动区间的终点,再moveStart移动区间的起点,在没有改变起点point之前,可以保证相对位置不变,更容易理解些。

/** 
* 设置textarea的选中区域 
*/ 
setSelectRange : function( textarea, start, end ) 
{ 
if ( typeof textarea.createTextRange != 'undefined' )// IE 
{ 
var range = textarea.createTextRange(); 
// 先把相对起点移动到0处 
range.moveStart( "character", 0) 
range.moveEnd( "character", 0); 
range.collapse( true); // 移动插入光标到start处 
range.moveEnd( "character", end); 
range.moveStart( "character", start); 
range.select(); 
} // if 
else if ( typeof textarea.setSelectionRange != 'undefined' ) 
 { 

 textarea.setSelectionRange(start, end); 

 textarea.focus(); 
 } // else 

 }

实现了选中区域获取及设置方法后,其他如文字插入,替换的实现就比较简单了。
Javascript 相关文章推荐
浅谈jQuery中对象遍历.eq().first().last().slice()方法
Nov 26 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
Jul 27 Javascript
JavaScript中实现无缝滚动、分享到侧边栏实例代码
Apr 06 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
微信JS-SDK坐标位置如何转换为百度地图坐标
Jul 04 Javascript
Ajax+FormData+javascript实现无刷新表单信息提交
Oct 24 Javascript
JavaScript中值类型和引用类型的区别
Feb 23 Javascript
DVA框架统一处理所有页面的loading状态
Aug 25 Javascript
30分钟快速实现小程序语音识别功能
Nov 27 Javascript
vue props对象validator自定义函数实例
Nov 13 Javascript
vue-路由精讲 二级路由和三级路由的作用
Aug 06 Javascript
React实现todolist功能
Dec 28 Javascript
基于jquery的一行代码轻松实现拖动效果
Dec 28 #Javascript
JS date对象的减法处理实现代码
Dec 28 #Javascript
javascript中检测变量的类型的代码
Dec 28 #Javascript
javascript中的作用域scope介绍
Dec 28 #Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 #Javascript
按给定几率进行随机抽取的js代码
Dec 28 #Javascript
围观tangram js库
Dec 28 #Javascript
You might like
PHP编程之高级技巧——利用Mysql函数
2006/10/09 PHP
PHP5与MySQL数据库操作常用代码 收集
2010/03/21 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP对称加密函数实现数据的加密解密
2016/10/27 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
用js怎么把&amp;字符换成&quot;&amp;amp:&quot;
2006/10/19 Javascript
LazyForm jQuery plugin 定制您的CheckBox Radio和Select
2009/10/24 Javascript
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
2010/01/22 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JS将秒换成时分秒实现代码
2013/09/03 Javascript
js显示当前日期时间和星期几
2015/10/22 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
深入理解js中的加载事件
2017/02/08 Javascript
Angular17之Angular自定义指令详解
2018/01/21 Javascript
微信小程序实现人脸识别
2018/05/25 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
vue.js的双向数据绑定Object.defineProperty方法的神奇之处
2019/01/18 Javascript
angular4应用中输入的最小值和最大值的方法
2019/05/17 Javascript
JS使用正则表达式实现常用的表单验证功能分析
2020/04/30 Javascript
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
[00:48]食人魔魔法师至宝“金鹏之幸”全新模型和自定义特效展示
2019/12/19 DOTA
[01:06:18]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第二场 1月26日
2021/03/11 DOTA
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python实现简单的代理服务器
2015/07/25 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
基于python使用tibco ems代码实例
2019/12/20 Python
Python 在局部变量域中执行代码
2020/08/07 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
创业计划书六个要素
2013/12/26 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
金融管理毕业生求职信
2014/03/03 职场文书
网络工程专业自荐信范文
2014/03/16 职场文书
教师病假条范文
2015/08/17 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android
使用Cargo工具高效创建Rust项目
2022/08/14 Javascript