处理文本部分内容的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 相关文章推荐
解决 firefox 不支持 document.all的方法
Mar 12 Javascript
jQuery Ajax提交表单查询获得数据实例代码
Sep 19 Javascript
深入理解JavaScript是如何实现继承的
Dec 12 Javascript
javascript中alert()与console.log()的区别
Aug 26 Javascript
第三篇Bootstrap网格基础
Jun 21 Javascript
简单的vue-resourse获取json并应用到模板示例
Feb 10 Javascript
WebSocket的通信过程与实现方法详解
Apr 29 Javascript
详解如何在Vue里建立长按指令
Aug 20 Javascript
layui内置模块layim发送图片添加加载动画的方法
Sep 23 Javascript
基于Electron实现桌面应用开发代码实例
Jul 07 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
Aug 03 Javascript
JavaScript 反射学习技巧
Oct 16 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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
2010/03/21 PHP
Windows下的PHP 5.3.x安装 Zend Guard Loader教程
2014/09/06 PHP
Zend Framework实现多文件上传功能实例
2016/03/21 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
CodeIgniter框架数据库基本操作示例
2018/05/24 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
2018/09/26 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
2019/09/30 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
2019/10/14 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
JavaScript 仿关机效果的图片层
2008/12/26 Javascript
javascript fullscreen全屏实现代码
2009/04/09 Javascript
简单实用的js调试logger组件实现代码
2010/11/20 Javascript
关于js类的定义
2011/06/28 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
jQuery is()函数用法3例
2014/05/06 Javascript
js遍历子节点子元素附属性及方法
2014/08/19 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
JS中的二叉树遍历详解
2016/03/18 Javascript
AngularJs实现聊天列表实时刷新功能
2017/06/15 Javascript
JS实现仿UC浏览器前进后退效果的实例代码
2017/07/17 Javascript
微信小程序用户盒子、宫格列表的实现
2020/07/01 Javascript
寻找网站后台地址的python脚本
2014/09/01 Python
Python正则表达式匹配ip地址实例
2014/10/09 Python
TensorFlow实现AutoEncoder自编码器
2018/03/09 Python
pandas读取csv文件,分隔符参数sep的实例
2018/12/12 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
python报错: 'list' object has no attribute 'shape'的解决
2020/07/15 Python
Python操作Excel的学习笔记
2021/02/18 Python
施华洛世奇加拿大官网:SWAROVSKI加拿大
2018/06/03 全球购物
山海经纬软件测试笔试题和面试题
2013/04/02 面试题
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
中层竞聘演讲稿
2014/01/09 职场文书
网络营销实训总结
2015/08/03 职场文书
高二英语教学反思
2016/03/03 职场文书