处理文本部分内容的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代码
Mar 01 Javascript
JavaScript 原型链学习总结
Oct 29 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(二)人物行走的实现
Jan 23 Javascript
js控制鼠标事件移动及移出效果显示
Oct 19 Javascript
JavaScript中window.open用法实例详解
Apr 15 Javascript
JS通过Cookie判断页面是否为首次打开
Feb 05 Javascript
javascript运算符——逻辑运算符全面解析
Jun 27 Javascript
Jquery AJAX POST与GET之间的区别详细介绍
Oct 17 Javascript
Node.js 8 中的 util.promisify的详解
Jun 12 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
Jul 03 Javascript
如何从零开始手写Koa2框架
Mar 22 Javascript
jQuery实现可以计算进制转换的计算器
Oct 19 jQuery
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无限分类的深入理解
2013/06/02 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
yii2使用gridView实现下拉列表筛选数据
2017/04/10 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
2018/06/13 PHP
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
Vue.js 父子组件通讯开发实例
2016/09/06 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
2016/12/09 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
JavaScript注册时密码强度校验代码
2017/06/30 Javascript
Angular动画实现的2种方式以及添加购物车动画实例代码
2018/08/09 Javascript
Vue之beforeEach非登录不能访问的实现(代码亲测)
2019/07/18 Javascript
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
Echarts实现单条折线可拖拽效果
2019/12/19 Javascript
全网小程序接口请求封装实例代码
2020/11/06 Javascript
[04:10]2016国际邀请赛中国区预选赛第二日TOP10精彩集锦
2016/06/28 DOTA
python实现探测socket和web服务示例
2014/03/28 Python
Python实现图像几何变换
2015/07/06 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
DRF跨域后端解决之django-cors-headers的使用
2019/01/27 Python
PyQt打开保存对话框的方法和使用详解
2019/02/27 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】
2019/06/17 Python
关于 Python opencv 使用中的 ValueError: too many values to unpack
2019/06/28 Python
Python Django Vue 项目创建过程详解
2019/07/29 Python
Python发送邮件实现基础解析
2020/08/14 Python
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
小学教师岗位职责
2013/11/25 职场文书
应聘编辑职位自荐信范文
2014/01/05 职场文书
行政助理的岗位职责
2014/02/18 职场文书
敲诈同学钱财检讨书范文
2014/11/18 职场文书
2015新年寄语大全
2014/12/08 职场文书
工作总结之小学教师体育工作范文(3篇)
2019/10/07 职场文书