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制作的幻灯片图集效果打包下载
Feb 12 Javascript
JavaScript setTimeout使用闭包功能实现定时打印数值
Dec 18 Javascript
bootstrap table 数据表格行内修改的实现代码
Feb 13 Javascript
jquery.validate.js 多个相同name的处理方式
Jul 10 jQuery
使用InstantClick.js让页面提前加载200ms
Sep 12 Javascript
JS实现图片居中悬浮效果
Dec 25 Javascript
浅谈React前后端同构防止重复渲染
Jan 05 Javascript
JS实现读取xml内容并输出到div中的方法示例
Apr 19 Javascript
js/jQuery实现全选效果
Jun 17 jQuery
javascript的惯性运动实现代码实例
Sep 07 Javascript
node.js中 redis 的安装和基本操作示例
Feb 10 Javascript
Vue3实现简易音乐播放器组件
Aug 14 Vue.js
基于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生成文件
2007/01/15 PHP
php图片缩放实现方法
2014/02/20 PHP
学习PHP的数组总结【经验】
2016/05/05 PHP
php通过PHPExcel导入Excel表格到MySQL数据库的简单实例
2016/10/29 PHP
javascript web对话框与弹出窗口
2009/02/22 Javascript
javascript表单验证使用示例(javascript验证邮箱)
2014/01/07 Javascript
js确认删除对话框适用于a标签及submit
2014/07/10 Javascript
很棒的Bootstrap选项卡切换效果
2016/07/01 Javascript
JS正则表达式修饰符global(/g)用法分析
2016/12/27 Javascript
基于Bootstrap表单验证功能
2017/11/17 Javascript
layui的layedit富文本赋值方法
2019/09/18 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
JavaScript中的各种宽高属性的实现
2020/05/08 Javascript
js实现批量删除功能
2020/08/27 Javascript
Python的函数的一些高阶特性
2015/04/27 Python
python实现简易数码时钟
2021/02/19 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
python实现微信打飞机游戏
2020/03/24 Python
Python 代码调试技巧示例代码
2020/08/11 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
Pretty Green美国:英式摇滚服饰风格代表品牌之一
2019/01/23 全球购物
网络研修随笔感言
2014/02/17 职场文书
超市开店计划书
2014/04/26 职场文书
演讲稿的写法
2014/05/19 职场文书
根叔历年演讲稿
2014/05/20 职场文书
百日安全生产活动总结
2014/07/05 职场文书
员工工作自我评价
2014/09/26 职场文书
公安局副政委班子个人对照检查材料
2014/10/04 职场文书
2014年行政工作总结
2014/11/19 职场文书
2015年语文教学工作总结
2015/05/25 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
2016年大学迎新工作总结
2015/10/14 职场文书
深入理解redis中multi与pipeline
2021/06/02 Redis
vue实现Toast组件轻提示
2022/04/10 Vue.js