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 相关文章推荐
Javascript miscellanea -display data real time, using window.status
Jan 09 Javascript
js控制框架刷新
Aug 01 Javascript
JQUERY THICKBOX弹出层插件
Aug 30 Javascript
jquery实现点击TreeView文本父节点展开/折叠子节点
Jan 10 Javascript
分享一个自己写的简单的javascript分页组件
Feb 15 Javascript
jQuery寻找n以内完全数的方法
Jun 24 Javascript
利用JS生成博文目录及CSS定制博客
Feb 10 Javascript
js+css3制作时钟特效
Oct 16 Javascript
微信小程序实现验证码获取倒计时效果
Feb 08 Javascript
cordova+vue+webapp使用html5获取地理位置的方法
Jul 06 Javascript
js实现视图和数据双向绑定的方法分析
Feb 05 Javascript
JS中多层次排序算法的实现代码
Jan 06 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
支持php4、php5的mysql数据库操作类
2008/01/10 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
php第一次无法获取cookie问题处理
2014/12/15 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP面向对象之里氏替换原则简单示例
2018/04/08 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
JQuery 动画卷页 返回顶部 动画特效(兼容Chrome)
2010/02/15 Javascript
JavaScript地图拖动功能SpryMap的简单实现
2013/07/17 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
倒记时60刷新网页的js代码
2014/02/18 Javascript
a标签跳转到指定div,jquery添加和移除class属性的实现方法
2016/10/10 Javascript
jQuery实现简单的滑动导航代码(移动端)
2017/05/22 jQuery
Vue.use()在new Vue() 之前使用的原因浅析
2019/08/26 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
jQuery/JS监听input输入框值变化实例
2019/10/17 jQuery
js实现mp3录音通过websocket实时传送+简易波形图效果
2020/06/12 Javascript
vue穿梭框实现上下移动
2021/01/29 Vue.js
Python 第一步 hello world
2009/09/25 Python
Python下的twisted框架入门指引
2015/04/15 Python
Python对多属性的重复数据去重实例
2018/04/18 Python
Python爬虫抓取代理IP并检验可用性的实例
2018/05/07 Python
python写入并获取剪切板内容的实例
2018/05/31 Python
selenium使用chrome浏览器测试(附chromedriver与chrome的对应关系表)
2018/11/29 Python
使用HTML5的File实现base64和图片的互转
2013/08/01 HTML / CSS
HTML5标签嵌套规则详解【必看】
2016/04/26 HTML / CSS
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
马来西亚网上美容店:Hermo.my
2017/11/25 全球购物
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
城建学院毕业生自荐信
2014/01/31 职场文书
硕士研究生就业推荐信
2014/05/18 职场文书
人事任命书怎么写
2014/06/05 职场文书
保护地球的标语
2014/06/17 职场文书
高一英语教学反思
2016/03/03 职场文书
银行求职信范文
2019/05/13 职场文书
微软Win11什么功能最惊艳? Windows11新功能特性汇总
2021/11/21 数码科技
Java无向树分析 实现最小高度树
2022/04/09 Javascript