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 相关文章推荐
EXTJS FORM HIDDEN TEXTFIELD 赋值 使用value不好用的问题
Apr 16 Javascript
仿新浪微博登陆邮箱提示效果的js代码
Aug 02 Javascript
JS Date函数整理方便使用
Oct 23 Javascript
解决js函数闭包内存泄露问题的办法
Jan 25 Javascript
Bootstrap布局组件应用实例讲解
Feb 17 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
May 07 Javascript
JSON字符串转换JSONObject和JSONArray的方法
Jun 03 Javascript
node.js中module.exports与exports用法上的区别
Sep 02 Javascript
JavaScript文件的同步和异步加载的实现代码
Aug 19 Javascript
让你5分钟掌握9个JavaScript小技巧
Jun 09 Javascript
基于vue中对鼠标划过事件的处理方式详解
Aug 22 Javascript
详解一个基于套接字实现长连接的express
Mar 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
laravel框架实现后台登录、退出功能示例
2019/10/31 PHP
php实现通过stomp协议连接ActiveMQ操作示例
2020/02/23 PHP
javascript 写的一个简单的timer
2009/07/30 Javascript
JavaScript高级程序设计 扩展--关于动态原型
2010/11/09 Javascript
js作用域及作用域链概念理解及使用
2013/04/15 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
基于vue2.x的电商图片放大镜插件的使用
2018/01/22 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
vue项目中使用scss的方法步骤
2019/05/16 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
Python编码类型转换方法详解
2016/07/01 Python
python实现斐波那契数列的方法示例
2017/01/12 Python
python实现简单日期工具类
2019/04/24 Python
python定时复制远程文件夹中所有文件
2019/04/30 Python
Python 正则表达式爬虫使用案例解析
2019/09/23 Python
Python实现平行坐标图的绘制(plotly)方式
2019/11/22 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
django项目中新增app的2种实现方法
2020/04/01 Python
python中re模块知识点总结
2021/01/17 Python
法国票务网站:Ticketmaster法国
2018/07/09 全球购物
南京迈特望C/C++面试题
2012/07/09 面试题
介绍一下.net和Java的特点和区别
2012/09/26 面试题
专科毕业生求职简历的自我评价
2013/10/12 职场文书
个人思想理论学习的自我鉴定
2013/11/30 职场文书
岗位竞聘书范文
2014/03/31 职场文书
元旦寄语大全
2014/04/10 职场文书
通信工程专业求职信
2014/06/04 职场文书
2015年小学语文教学工作总结
2015/05/25 职场文书
《怀念母亲》教学反思
2016/02/19 职场文书
《鲸》教学反思
2016/02/23 职场文书
2016年保险公众宣传日活动总结
2016/04/05 职场文书
python pygame 开发五子棋双人对弈
2022/05/02 Python
MySQL一劳永逸永久支持输入中文的方法实例
2022/08/05 MySQL