处理文本部分内容的TextRange对象应用实例


Posted in Javascript onJuly 29, 2014

因用户要求方与TextRange对象结缘,用于处理JavaScript对象文本部分内容的一个对象。

TextRange是用来表现HTML元素中文字的对象,虽然我们平时不太常用这个对象,可是它却在IE4.0中就已提供了。不过TextRange提供的调用方法却都比较晦涩,那么我们能拿它做些什么呢?
TextRange的传统用途是对用户在Web页上用鼠标圈选的文字内容的操作,比如变化、删除、新增等。但其经典的用途却是,在Web页面中查找文字(这个比较简单)和获取输入框光标的位置。其中后者又有可以衍生出很多更有用的用途,比如:限制输入的MaskTextBox,其核心技术点就是获取输入框的光标位置,然后使用正则表达式判断输入内容。还有我后面会介绍的"使用方向键在输入框矩阵中自然的导航",核心技术点也是获取输入框中的光标位置。

获取输入框中的光标位置的整个代码其实很短,只是这些对象和方法不太常用而已。

Js代码

<span style="font-size: medium;"><script language="javascript"> 

function GetCursorPsn(txb) 

{ 

var slct = document.selection; 

var rng = slct.createRange(); 

txb.select(); 

rng.setEndPoint("StartToStart", slct.createRange()); 

var psn = rng.text.length; 

rng.collapse(false); 

rng.select(); 

return psn; 

} 

</script></span>

这里说一下使用这个GetCursorPsn()方法后,会给输入框操作带来的副作用。

对于输入框

Html代码

<span style="font-size: medium;"><input type="text" onkeydown="GetCursorPsn(this)"></span>

它将不能再使用Shift+左右这两个方向键来选择文本;对于

Html代码

<span style="font-size: medium;"><textarea onkeydown="GetCursorPsn(this)"></textarea></span>

,将不能再使用Shift+上下左右四个方向键来选择文本。因为代码在获取了当前光标到文本的startPoint后,调用rng.collapse(false );会 改变文本筐内文本的EditPoint。

1、满足用户要求代码片段,使用上下左右四个键实现文本框的跳转,同时选择其文本框内容,从而方便用户修改,代码如下:

Js代码

<span style="font-size: medium;">var range = $currentTextfield.createTextRange();//$currentTextfield为jQuery对象 

range.moveStart('character',0); 

range.select();</span>

以下是舶来的一片个人感觉还算不错的关于TextRange的文章:

Html代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 

<title> new document </title> 

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

<style> 

body { font-size:12px; } 

#show { background-color:#CCFF99; } 

</style> 

</head> 

<body> 

<textarea id="content" cols="30" rows="10"> 

河中鱼类离奇死亡,下游居民频染怪病,沿岸植物不断变异,是残留农药?还是生化攻击?敬请关注今晚CCTV-10《科学探索》,即将播出的专题节目:《神秘的河边洗脚人--中国男足》 

</textarea> 


<button id="btn">获取选中值</button> 

<div id="show"></div> 

<script> 

String.prototype.trim = function() { 

return this.replace(/^\s+|\s+$/g, ""); 

} 

/* 方法一 FF下有点问题 */ 

function getSelectText() { 

try{ 

// IE: document.selection.createRange() W3C:window.getSelection() 

var selectText = (document.selection && document.selection.createRange )? document.selection.createRange().text : window.getSelection().toString(); 

if(selectText != null && selectText.trim() != ""){ 

return selectText; 

} 

}catch(err){} 

} 

/* 方法二 */ 

function getSelectText2(id) { 

var t = document.getElementById(id); 

if(window.getSelection) { 

if(t.selectionStart != undefined && t.selectionEnd != undefined) { 

return t.value.substring(t.selectionStart, t.selectionEnd); 

} else { 

return ""; 

} 

} else { 

return document.selection.createRange().text; 

} 

} 

document.getElementById('btn').onclick = function() { 

document.getElementById('show').innerHTML = getSelectText2('content'); 

} 

</script> 

</body> 

</html>
Javascript 相关文章推荐
JavaScript function 的 length 属性使用介绍
Sep 15 Javascript
node.js中的http.createClient方法使用说明
Dec 15 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
Mar 17 Javascript
Ajax分页插件Pagination从前台jQuery到后端java总结
Jul 22 Javascript
Vue.js创建Calendar日历效果
Nov 03 Javascript
基于jquery二维码生成插件qrcode
Jan 07 Javascript
JS如何判断浏览器类型和详细区分IE各版本浏览器
Mar 04 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
Apr 25 Javascript
微信小程序websocket实现聊天功能
Mar 30 Javascript
JS插件clipboard.js实现一键复制粘贴功能
Dec 04 Javascript
ES6使用新特性Proxy实现的数据绑定功能实例
May 11 Javascript
vue使用echarts实现折线图
Mar 21 Vue.js
js键盘事件的keyCode
Jul 29 #Javascript
js识别不同浏览器基于userAgent做判断
Jul 29 #Javascript
让浏览器DOM元素最后加载的js方法
Jul 29 #Javascript
js实现遮罩层划出效果是生成div而不是显示
Jul 29 #Javascript
解释&amp;&amp;和||在javascript中的另类用法
Jul 28 #Javascript
wap手机图片滑动切换特效无css3元素js脚本编写
Jul 28 #Javascript
jQuery内置的AJAX功能和JSON的使用实例
Jul 27 #Javascript
You might like
PHP循环获取GET和POST值的代码
2008/04/09 PHP
基于在生产环境中使用php性能测试工具xhprof的详解
2013/06/03 PHP
关于js与php互相传值的介绍
2013/06/25 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
2014/04/10 PHP
PHP中PDO连接数据库中各种DNS设置方法小结
2016/05/13 PHP
Thinkphp连表查询及数据导出方法示例
2016/10/15 PHP
PHP实现接收二进制流转换成图片的方法
2017/01/10 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
PHP使用观察者模式处理异常信息的方法详解
2019/09/24 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
扒一扒JavaScript 预解释
2015/01/28 Javascript
js制作网站首页图片轮播特效代码
2016/08/30 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
Angular使用 ng-img-max 调整浏览器中的图片的示例代码
2017/08/17 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
Webpack 之 babel-loader文件预处理器详解
2018/03/23 Javascript
详解使用element-ui table组件的筛选功能的一个小坑
2018/11/02 Javascript
Python3.2中Print函数用法实例详解
2015/05/19 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
2016/04/09 Python
python3利用Dlib19.7实现人脸68个特征点标定
2018/02/26 Python
python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现
2018/06/11 Python
python 进程 进程池 进程间通信实现解析
2019/08/23 Python
django 多对多表的创建和插入代码实现
2019/09/09 Python
python 利用pyttsx3文字转语音过程详解
2019/09/25 Python
python创建ArcGIS shape文件的实现
2019/12/06 Python
Python实现计算长方形面积(带参数函数demo)
2020/01/18 Python
python实现mean-shift聚类算法
2020/06/10 Python
通过Python实现Payload分离免杀过程详解
2020/07/13 Python
商务英语专业自荐信
2013/10/14 职场文书
自我介绍演讲稿
2014/01/15 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
环保建议书作文500字
2015/09/14 职场文书
详解JavaScript中Arguments对象用途
2021/08/30 Javascript
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
sql时间段切分实现每隔x分钟出一份高速门架车流量
2022/02/28 SQL Server