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 .ajax 在IE下卡死问题的解决方法
Oct 26 Javascript
谈谈关于JavaScript 中的 MVC 模式
Apr 11 Javascript
javascript中负数算术右移、逻辑右移的奥秘探索
Oct 17 Javascript
Jquery Uploadify上传带进度条的简单实例
Feb 12 Javascript
JavaScript截取字符串的2个函数介绍
Aug 27 Javascript
Javascript中Array.prototype.map()详解
Oct 22 Javascript
学习JavaScript设计模式之状态模式
Jan 08 Javascript
自动完成的搜索框javascript实现
Feb 26 Javascript
教你用javascript实现随机标签云效果_附代码
Mar 16 Javascript
jQuery EasyUI结合zTree树形结构制作web页面
Sep 01 jQuery
Node.js 使用request模块下载文件的实例
Sep 05 Javascript
vue使用echarts画组织结构图
Feb 06 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 编写的日历
2006/10/09 PHP
PHP中Fatal error session_start()错误解决步骤
2014/08/05 PHP
php数组随机排序实现方法
2015/06/13 PHP
简单介绍PHP的责任链编程模式
2015/08/11 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
ExtJS 2.0实用简明教程 之ExtJS版的Hello
2009/04/29 Javascript
jquery使用each方法遍历json格式数据实例
2015/05/18 Javascript
基于jQuery实现音乐播放试听列表
2016/04/14 Javascript
Angular中$cacheFactory的作用和用法实例详解
2016/08/19 Javascript
微信小程序 122100版本更新问题解决方案
2016/12/22 Javascript
vue省市区三联动下拉选择组件的实现
2017/04/28 Javascript
nodejs+websocket实时聊天系统改进版
2017/05/18 NodeJs
ES6深入理解之“let”能替代”var“吗?
2017/06/28 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
简述Vue中容易被忽视的知识点
2019/12/09 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
Python程序设计入门(4)模块和包
2014/06/16 Python
在Django框架中编写Contact表单的教程
2015/07/17 Python
Django的URLconf中使用缺省视图参数的方法
2015/07/18 Python
python中的迭代和可迭代对象代码示例
2017/12/27 Python
Python装饰器用法示例小结
2018/02/11 Python
python实现学生信息管理系统
2020/04/05 Python
python中提高pip install速度
2020/02/14 Python
解决jupyter notebook 前面书写后面内容消失的问题
2020/04/13 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
斯图尔特·韦茨曼鞋加拿大官网:Stuart Weitzman加拿大
2019/10/13 全球购物
大学学习生活感言
2014/01/18 职场文书
医药销售求职信范文
2014/02/01 职场文书
《长城》教学反思
2014/02/14 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
学生会个人总结范文
2015/02/15 职场文书
2015年助理政工师工作总结
2015/05/26 职场文书
2015年统计员个人工作总结
2015/07/23 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js
python中的getter与setter你了解吗
2022/03/24 Python