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 相关文章推荐
WEB高性能开发之疯狂的HTML压缩
Jun 19 Javascript
jQuery实现Tab选项卡切换效果简单演示
Nov 23 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
Aug 30 Javascript
JS实现倒计时(天数、时、分、秒)
Nov 16 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 Javascript
浅析vue插槽和作用域插槽的理解
Apr 22 Javascript
JS中实现浅拷贝和深拷贝的代码详解
Jun 05 Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 Javascript
Vue的v-model的几种修饰符.lazy,.number和.trim的用法说明
Aug 05 Javascript
JS监听Esc 键触发事键
Apr 14 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结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
实现PHP搜索加分页
2016/10/12 PHP
PHP的mysqli_rollback()函数讲解
2019/01/23 PHP
phpcmsv9.0任意文件上传漏洞解析
2020/10/20 PHP
JavaScript 在各个浏览器中执行的耐性
2009/04/06 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
js实现千分符和保留几位小数的简单实例
2016/08/01 Javascript
node.js中module.exports与exports用法上的区别
2016/09/02 Javascript
js内置对象处理_打印学生成绩单的简单实现
2016/09/24 Javascript
AngularJS实现DOM元素的显示与隐藏功能
2016/11/22 Javascript
Canvas 制作动态进度加载水球详解及实例代码
2016/12/09 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
利用CDN加速react webpack打包后的文件详解
2018/02/22 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
Vue-cli项目部署到Nginx服务器的方法
2019/11/01 Javascript
JS apply用法总结和使用场景实例分析
2020/03/14 Javascript
vue-video-player视频播放器使用配置详解
2020/10/23 Javascript
[01:00:35]2018DOTA2亚洲邀请赛3月30日B组 EffcetVSMineski
2018/03/31 DOTA
在Python中利用Pandas库处理大数据的简单介绍
2015/04/07 Python
python实现带错误处理功能的远程文件读取方法
2015/04/29 Python
python3爬取数据至mysql的方法
2018/06/26 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
django 控制页面跳转的例子
2019/08/06 Python
Python3 搭建Qt5 环境的方法示例
2020/07/16 Python
PyTorch中Tensor的数据类型和运算的使用
2020/09/03 Python
建筑文秘专业个人求职信范文
2013/12/28 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
家长评语怎么写
2014/12/30 职场文书
2015驻村干部工作总结
2015/04/07 职场文书
党员证明模板
2015/06/19 职场文书
基于python制作简易版学生信息管理系统
2021/04/20 Python
多人盗宝《绿林侠盗》第三赛季4.5上线 跨平台实装
2022/04/03 其他游戏
Beekeeper Studio开源数据库管理工具比Navicat更炫酷
2022/06/21 数据库