处理文本部分内容的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 相关文章推荐
js自定义事件及事件交互原理概述(二)
Feb 01 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
Apr 04 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
May 23 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
Mar 03 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
JS hashMap实例详解
May 26 Javascript
H5手机端多文件上传预览插件
Apr 21 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
Dec 20 Javascript
vue超时计算的组件实例代码
Jul 09 Javascript
React实现全局组件的Toast轻提示效果
Sep 21 Javascript
antd组件Upload实现自己上传的实现示例
Dec 18 Javascript
Vue.js轮播图走马灯代码实例(全)
May 08 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记录用户通过搜索引擎进网站的关键词
2014/02/13 PHP
PHP使用DOM对XML解析处理操作示例
2019/07/04 PHP
javascript编程起步(第五课)
2007/02/27 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
jquery 实现上下滚动效果示例代码
2013/08/09 Javascript
利用js实现前台动态添加文本框,后台获取文本框内容(示例代码)
2013/11/25 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
javascript制作loading动画效果 loading效果
2014/01/14 Javascript
js字符串完全替换函数分享
2014/12/03 Javascript
JS实现仿QQ面板的手风琴效果折叠菜单代码
2015/09/11 Javascript
javascript拖拽应用实例
2016/03/25 Javascript
详解搭建es6+devServer简单开发环境
2018/09/25 Javascript
JavaScript时间日期操作实例小结【5个示例】
2018/12/22 Javascript
Vue如何基于vue-i18n实现多国语言兼容
2020/07/17 Javascript
在项目vue中使用echarts的操作步骤
2020/09/07 Javascript
vue全局使用axios的操作
2020/09/08 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
Python实现将doc转化pdf格式文档的方法
2018/01/19 Python
分析Python中解析构建数据知识
2018/01/20 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
pytorch训练imagenet分类的方法
2018/07/27 Python
Django框架model模型对象验证实现方法分析
2019/10/02 Python
基于python实现语音录入识别代码实例
2020/01/17 Python
Python如何基于Tesseract实现识别文字功能
2020/06/05 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
澳大利亚领先的运动鞋商店:Hype DC
2018/03/31 全球购物
英国和爱尔兰的自炊式豪华度假小屋:Rural Retreats
2018/06/08 全球购物
售后服务承诺书范文
2014/03/26 职场文书
大学生职业生涯十年规划书范文
2014/09/17 职场文书
公司租车协议书
2015/01/29 职场文书
停电调休通知
2015/04/16 职场文书
浅谈resultMap的用法及关联结果集映射
2021/06/30 Java/Android
MySQL 逻辑备份 into outfile
2022/05/15 MySQL