处理文本部分内容的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 appendChild,innerHTML,join性能比较代码
Aug 29 Javascript
浅谈JavaScript中的Math.atan()方法的使用
Jun 14 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
Aug 11 Javascript
jQuery中serializeArray()与serialize()的区别实例分析
Dec 09 Javascript
不用一句js代码初始化组件
Jan 27 Javascript
JS实现评价的星星功能
Aug 20 Javascript
vue脚手架搭建过程图解
Jun 06 Javascript
微信小程序点击图片实现长按预览、保存、识别带参数二维码、转发等功能
Jul 20 Javascript
Bootstrap实现模态框效果
Sep 30 Javascript
手写Vue源码之数据劫持示例详解
Jan 04 Vue.js
游戏开发中如何使用CocosCreator进行音效处理
Apr 14 Javascript
react国际化react-intl的使用
May 06 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二分法在IP地址查询中的应用
2008/08/12 PHP
destoon首页调用求购供应信息的地区名称的方法
2014/08/21 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
PHP5.2下preg_replace函数的问题
2015/05/08 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
深入解析AngularJS框架中$scope的作用与生命周期
2016/03/05 Javascript
jQuery EasyUI API 中文帮助文档和扩展实例
2016/08/01 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
Angular.js初始化之ng-app的自动绑定与手动绑定详解
2017/07/31 Javascript
关于在mongoose中填充外键的方法详解
2017/08/14 Javascript
原生nodejs使用websocket代码分享
2018/04/07 NodeJs
JavaScript中click和onclick本质区别与用法分析
2018/06/07 Javascript
详解React项目如何修改打包地址(编译输出文件地址)
2019/03/21 Javascript
vue2配置scss的方法步骤
2019/06/06 Javascript
微信小程序仿通讯录功能
2020/04/09 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
Vue使用screenfull实现全屏效果
2020/09/17 Javascript
JavaScript的一些小技巧分享
2021/01/06 Javascript
Python内置的字符串处理函数整理
2013/01/29 Python
centos6.4下python3.6.1安装教程
2017/07/21 Python
python多线程并发让两个LED同时亮的方法
2019/02/18 Python
python,Django实现的淘宝客登录功能示例
2019/06/12 Python
Python判断字符串是否xx开始或结尾的示例
2019/08/08 Python
Python实现搜索算法的实例代码
2020/01/02 Python
HTML5 Web Database 数据库的SQL语句的使用方法
2012/12/09 HTML / CSS
荷兰DOD药房中文官网:DeOnlineDrogist
2020/12/27 全球购物
博士学位自我鉴定范文
2013/12/26 职场文书
销售冠军获奖感言
2014/02/03 职场文书
整改报告怎么写
2014/11/06 职场文书
解约证明模板
2015/06/19 职场文书
九不准学习心得体会
2016/01/23 职场文书
你有一份《诚信考试承诺书》待领取
2019/11/13 职场文书
python如何在word中存储本地图片
2021/04/07 Python