处理文本部分内容的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中length属性的探索
Jul 31 Javascript
jQuery.event兼容各浏览器的event详细解析
Dec 18 Javascript
window.location不跳转的问题解决方法
Apr 17 Javascript
require.js的用法详解
Oct 20 Javascript
浅析$.getJSON异步请求和同步请求
Jun 06 Javascript
AngularJS基础 ng-model-options 指令简单示例
Aug 02 Javascript
JavaScript基础——使用Canvas绘图
Nov 02 Javascript
jquery二级目录选中当前页的css样式
Dec 08 Javascript
详解Javascript中new()到底做了些什么?
Mar 29 Javascript
vue 组件高级用法实例详解
Apr 11 Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
Apr 10 jQuery
vue 进阶之实现父子组件间的传值
Apr 26 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模板技术[转]
2007/01/04 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
PHP中函数rand和mt_rand的区别比较
2012/12/26 PHP
php生成shtml类用法实例
2014/12/09 PHP
php通过ksort()函数给关联数组按照键排序的方法
2015/03/18 PHP
php获取'/'传参的值简单方法
2017/07/13 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
PHP抽象类和接口用法实例详解
2019/07/20 PHP
laravel框架中间件简单使用方法示例
2020/01/25 PHP
记录几个javascript有关的小细节
2007/04/02 Javascript
一个通过script自定义属性传递配置参数的方法
2014/09/15 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
jQuery EasyUi 验证功能实例解析
2017/01/06 Javascript
Angular.js 4.x中表单Template-Driven Forms详解
2017/04/25 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
利用d3.js实现蜂巢图表带动画效果
2019/09/03 Javascript
[05:06]DOTA2-DPC中国联赛 正赛 VG vs Magma选手采访
2021/03/11 DOTA
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
python三大神器之fabric使用教程
2019/06/10 Python
通过python改变图片特定区域的颜色详解
2019/07/15 Python
Python解析命令行读取参数之argparse模块
2019/07/26 Python
详解Python在使用JSON时需要注意的编码问题
2019/12/06 Python
CentOS7下安装python3.6.8的教程详解
2020/01/03 Python
Python调用Windows API函数编写录音机和音乐播放器功能
2020/01/05 Python
Keras - GPU ID 和显存占用设定步骤
2020/06/22 Python
领导的自我鉴定
2013/12/28 职场文书
记者岗位职责
2014/01/06 职场文书
行政文秘岗位职责范本
2014/02/10 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
2015年小学开学寄语
2015/02/27 职场文书
2015最新婚礼司仪主持词
2015/06/30 职场文书
老干部局2015年度工作总结
2015/10/22 职场文书
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android