处理文本部分内容的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(一)工厂方式 js面象对象的定义方法
Dec 15 Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
使用node.js 制作网站前台后台
Nov 13 Javascript
js实现iGoogleDivDrag模块拖动层拖动特效的方法
Mar 04 Javascript
js实现交通灯效果
Jan 13 Javascript
详解vue2.0 transition 多个元素嵌套使用过渡
Jun 19 Javascript
vue如何进行动画的封装
Sep 26 Javascript
react 兄弟组件如何调用对方的方法示例
Oct 23 Javascript
浅谈bootstrap layer.open中end的使用方法
Sep 12 Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 Javascript
微信小程序手动添加收货地址省市区联动
May 18 Javascript
vue等两个接口都返回结果再执行下一步的实例
Sep 08 Javascript
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安装问题
2006/10/09 PHP
php后台多用户权限组思路与实现程序代码分享
2012/02/13 PHP
深入php之规范编程命名小结
2013/05/15 PHP
PHP面向对象程序设计实例分析
2016/01/26 PHP
Yii框架实现记录日志到自定义文件的方法
2017/05/23 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
2017/09/02 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
Yii框架日志操作图文与实例详解
2019/09/09 PHP
使用jQuery操作Cookies的实现代码
2011/10/09 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
vue2滚动条加载更多数据实现代码
2017/01/10 Javascript
vue获取DOM元素并设置属性的两种实现方法
2017/09/30 Javascript
vue项目移动端实现ip输入框问题
2019/03/19 Javascript
移动端自适应flexible.js的使用方法(不用三大框架,仅写一个单html页面使用)推荐
2019/04/02 Javascript
vue 地区选择器v-distpicker的常用功能
2019/07/23 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
Js on及addEventListener原理用法区别解析
2020/07/11 Javascript
[01:56]林书豪DOTA2上海特级锦标赛励志短片
2016/03/05 DOTA
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python结合opencv实现人脸检测与跟踪
2015/06/08 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
centos6.5安装python3.7.1之后无法使用pip的解决方案
2019/02/14 Python
使用Django实现把两个模型类的数据聚合在一起
2020/03/28 Python
Python sorted对list和dict排序
2020/06/09 Python
美国著名手表网站:Timepiece
2017/11/15 全球购物
师范应届生语文教师求职信
2013/10/29 职场文书
安全生产活动月方案
2014/03/09 职场文书
班主任寄语大全
2014/04/04 职场文书
高中社区服务活动报告
2015/02/05 职场文书
教师创先争优承诺书
2015/04/27 职场文书
在职证明范本
2015/06/15 职场文书
导游词之宿迁乾隆行宫
2019/10/15 职场文书
详解Laravel服务容器的优势
2021/05/29 PHP