处理文本部分内容的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 相关文章推荐
超级兔子让浮动层消失的前因后果
Mar 09 Javascript
JavaScript的eval JSON object问题
Nov 15 Javascript
functional继承模式 摘自javascript:the good parts
Jun 20 Javascript
JavaScript 语言基础知识点总结(思维导图)
Nov 10 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
js不间断滚动的简单实现
Jun 03 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
Mar 21 Javascript
angularjs2 ng2 密码隐藏显示的实例代码
Aug 01 Javascript
理解 JavaScript EventEmitter
Mar 29 Javascript
微信小程序项目实践之主页tab选项实现
Jul 18 Javascript
利用Vue-draggable组件实现Vue项目中表格内容的拖拽排序
Jun 07 Javascript
js实现无缝轮播图特效
May 09 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获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
Thinkphp框架 表单自动验证登录注册 ajax自动验证登录注册
2016/12/27 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
js 未结束的字符串常量错误解决方法
2010/06/13 Javascript
javascript使用正则表达式检测IP地址
2014/12/03 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
javascript实现验证身份证号的有效性并提示
2015/04/30 Javascript
在HTML中插入JavaScript代码的示例
2015/06/03 Javascript
JavaScript精炼之构造函数 Constructor及Constructor属性详解
2015/11/05 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
AngularJS整合Springmvc、Spring、Mybatis搭建开发环境
2016/02/25 Javascript
基于iscroll.js实现下拉刷新和上拉加载效果
2016/11/28 Javascript
ng-options和ng-checked在表单中的高级运用(推荐)
2017/01/21 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
Vue下路由History模式打包后页面空白的解决方法
2018/06/29 Javascript
vue 项目build错误异常的解决方法
2019/04/22 Javascript
vue配置nprogress实现页面顶部进度条
2019/09/21 Javascript
JS运算符简单用法示例
2020/01/19 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
Python进行数据提取的方法总结
2016/08/22 Python
Python的语言类型(详解)
2017/06/24 Python
Python无损音乐搜索引擎实现代码
2018/02/02 Python
CentOS7下python3.7.0安装教程
2018/07/30 Python
分享一个页面平滑滚动小技巧(推荐)
2019/10/23 HTML / CSS
日本索尼音乐商店:Sony Music Shop
2018/07/17 全球购物
数据库什么时候应该被重组
2012/11/02 面试题
初中毕业生的自我评价
2014/03/03 职场文书
人力资源部经理助理岗位职责
2014/03/04 职场文书
文明村镇申报材料
2014/05/06 职场文书
新员工考核评语
2014/12/31 职场文书
2015年毕业生自荐信范文
2015/03/24 职场文书
如何通过简单的代码描述Angular父组件、子组件传值
2022/04/07 Javascript