javascript中的moveStart和moveEnd方法,createTextRange()方法和createRan...

JS 处理文档选择和范围创建【createRange | getSelection】 JS在光标、文本选择方面的应用 阅读详情
详探TextRange对象--查找与选择


TextRange对象是动态HTML(DHTML)的高级特性,使用它可以实现很多和文本有关的任务,例如搜索和选择文本。文本范围让您可以选择性的将字符、单词和句子从文档中挑选出来。TextRange对象是在HTML文档将要显示的文本流上建立开始和结束位置的抽象对象。

下面是TextRange的常用属性与方法:

属性
boundingHeight 获取绑定TextRange对象的矩形的高度
boundingLeft 获取绑定TextRange 对象的矩形左边缘和包含TextRange对象的左侧之间的距离
offsetLeft 获取对象相对于版面或由offsetParent属性指定的父坐标的计算左侧位置
offsetTop 获取对象相对于版面或由offsetParent属性指定的父坐标的计算顶端位置
htmlText 获取绑定TextRange对象的矩形的宽度
text 设置或获取范围内包含的文本
方法
moveStart 更改范围的开始位置
moveEnd 更改范围的结束位置
collapse 将插入点移动到当前范围的开始或结尾
move 折叠给定文本范围并将空范围移动给定单元数
execCommand 在当前文档、当前选中区或给定范围上执行命令
select 将当前选择区置为当前对象
findText 在文本中搜索文本并将范围的开始和结束点设置为包围搜索字符串。

使用TextRange对象通常包括三个基本的步骤:

1.创建文本范围
2.设置开始点和结束点
3.对范围进行操作

--------------------------------------------------------------------------------

示例1:

<script language="javascript">

function moveCursor()
{
var temp = this.txtNum.value;
if(isNaN(temp))
{
alert("请输入一个数字");
return;
}
var rng = this.txtTest.createTextRange();
rng.move("character",temp);
rng.select();   
}

</script>

<input type="text" name="txtTest" value="明·罗贯中《三国演义》第二十一回 操曰:“夫英雄者,胸怀大志,腹有良谋,有包藏宇宙之机,吞吐天地之志者也。" size="100"><br>

移动光标到第<input type="text" name="txtNum" size="5">个位置

<input type="button" name="btnMove" value="移动" onclick="moveCursor()">


上面的例子实现了一个简单的光标定位,涉及到了textRange的几个方法

1.createTextRange()

创建一个TextRange对象,BODY、TEXT、TextArea、BUTTON等元素都支持这个方法。该方法返回一个TextRange对象。

2.move("Unit"[,count])

move()方法执行两个操作。首先,方法在前一个结束点的位置重叠当前文档,将这里作为一个插入点;下一步,它将插入点向前或向后移动任意个字符、单词或句子单位。

方法的第一个参数是字符串,它指定的单位有character(字符)、word(词)、sentence(段落)、textedit。textedit 值将插入点移动到整个文本范围的结束处(不需要参数)。如果指定为前三种单位,忽略参数时默认值为1,也可以指定一个整数值来指示单元数,正数代表向前移动,负数代表向后移动。

注意在move()方法执行后范围仍是重叠的。

3.select()

select()方法选择当前文本范围内的文本,这里的显示光标也必须利用它来实现,因为所谓的"光标"可以理解为边界重合的范围


--------------------------------------------------------------------------------

示例2:

<script language="javascript">

function selectText(sp,ep)
{
if(isNaN(sp)||isNaN(ep))
{
alert("请输入数字!");
return;
}
//弱语言自动转换
sp = sp*1;
ep = ep*1; 
if(sp>=ep)
{
alert("开始位置必须比结束位置小");
return;
}
if(sp>txtBox.value.length||ep>txtBox.value.length)
{
alert("当前字符数最大为"+txtBox.value.length+",请重新输入");
return;
} 
var rng = this.txtBox.createTextRange();

//将开始点和结束点在容器起始位置重合
rng.moveStart("character",-txtBox.value.length);
rng.moveEnd("character",-txtBox.value.length);
rng.collapse(true);

//按参数值移动
rng.moveStart("character",sp);
rng.moveEnd("character",ep);

rng.select();            
}

</script>

<textarea name="txtBox" rows="7" cols="50" id="txtBox">
千里之外
歌手:周杰伦/费玉清 专辑:依然范特西

屋檐如悬崖风铃如沧海我等燕归来
时间被安排演一场意外你悄然走开
故事在城外浓雾散不开看不清对白
你听不出来风声不存在是我在感慨

梦醒来是谁在窗台把结局打开
那薄如蝉翼的未来经不起谁来拆
我送你离开千里之外你无声黑白
沉默年代或许不该太遥远的相爱
我送你离开天涯之外你是否还在
琴声何来生死难猜用一生去等待

闻泪声入林寻梨花白只得一行青苔
天在山之外雨落花台我两鬓斑白
闻泪声入林寻梨花白只得一行青苔
天在山之外雨落花台我等你来
</textarea><br>


指定选择范围:

<input type="text" size="5" id="txtStart">

-- <input type="text" size="5" id="txtEnd">

<input type="button" value="选择" onclick="selectText(txtStart.value,txtEnd.value)">

上面的例子演示了利用moveStart()和moveEne()方法选择范围,出现的几个方法的说明如下:

4.moveStart("Unit"[,count])与moveEnd("Unit"[,count])

moveStart()与moveEnd()方法类似于move()方法,默认情况下开始点为容器第一个字符、结束点为最后一个字符

我们可以修改上面的selectText()函数来证明:

function selectText()
{
var rng = txtBox.createTextRange();
rng.moveStart("character",1);
rng.moveEnd("character",-1);
rng.select();
}
将开始点向前移动一个字符、结束点向后移动一个字符,运行后可以看到选择的范围是除第1个字符和最后1个字符的整个文本范围。

5.collapse([Boolean])

可以用collapse()方法把文本范围从当前尺寸重叠成字符间的单个插入点。collapse()方法的可选参数是Boolean值,它指出范围是在当前范围的开始点重合,还是结束点重合。默认值为true,在开始点重合:


--------------------------------------------------------------------------------

示例2:

<textarea name="txtBox" rows="7" cols="50" id="txtBox">
菊花台 (满城尽带黄金甲主题曲)
歌手:周杰伦 专辑:依然范特西

你的泪光 柔弱中带伤
惨白的月弯弯 勾住过往
夜太漫长 凝结成了霜
是谁在阁楼上冰冷的绝望
雨轻轻淌 朱红色的窗
我一生在纸上 被风吹乱
梦在远方 化成一缕霞
随风飘散 你的模样

菊花惨淡地伤 你的笑容已泛黄
花落人断肠 我心事静静淌
北风乱夜未央 你的影子剪不断
徒留我孤单在湖面生霜
</textarea><br>

<input type="text" value="输入要查询的内容" id="txtFind">

<input type="button" value="查找下一个" onclick="findText(txtFind.value)">

<script language="javascript">

var rng = txtBox.createTextRange();

function findText(str)
{
if(str=="")
return;
//定义一个变量,作为moveStart()函数的偏移量,即开始点跳过选择文本
var num = 0;
if(document.selection)  
num = document.selection.createRange().text.length;
//每次调用函数,结束点都为末尾,而开始点是跳过选择文本后的新开始点
rng.moveStart("character",num);
rng.moveEnd("character",txtBox.value.length);
//搜索到后选择文本  
if(rng.findText(str))
rng.select();
//搜索到最后的范围还是找不到,则提示搜索完毕,并重新恢复rng最初的范围(否则无法执行新搜索)  
if(rng.text!=str)
{  
alert("搜索完毕");
rng = txtBox.createTextRange();
}
}  

</script>

5.findText("searchString"[,searchScope,flags])

TextRange对象最有用的方法之一是findText()方法,其默认行为是从开始点到结束点浏览文本范围,搜索一个不区分大小写的字符串匹配。如果在范围中发现一个实例,范围的开始点和结束点就放到这个文本中,方法返回true;否则返回false,开始点和结束点都不动。方法仅搜索显示文本,而任何标记或属性都不会被搜索。

可选参数searchScope是一个整数值,它指示从开始点的字符数,值越大,包含在搜索范围的文本越多;负值将迫使搜索操作从当前开始点向后搜索。

可选参数flag用来设置搜索是否区分大小写,或者是否仅匹配整个单词。参数是整数值,它用按位组合的数学方法计算单个值,这些值能容纳一个或多个设置。匹配整个单词的值为2;匹配大小写的值为4;如果只想匹配一项,则只提供希望的值就够了,但对于两种行为,要用位操作XOR操作符(^操作符)使值为6。

findText()方法最常用的应用包括范围中的查找和替换操作,以及格式化一个字符串的实例,因为搜索通常以范围的当前开始点开始,所以再次查询要将开始点移到范围中匹配文本的末尾(如示例3),移动后才能使findText()继续浏览剩下的文本范围,来查找另一个匹配。可以使用 collapse(false)方法迫使开始点移动第一个匹配的范围的结束点。所以示例3的findText()函数也可以修改为:

<script language="javascript">

var rng = txtBox.createTextRange();

function findText(str)
{
if(str=="")
return;

if(rng.findText(str))
{
rng.select();
rng.collapse(false);
}
//搜索到最后的范围还是找不到,则提示搜索完毕,并重新恢复rng最初的范围(否则无法执行新搜索)  
else
{  
alert("搜索完毕");
rng = txtBox.createTextRange();
}
}  

</script>

6.parentElement()

parentElement()方法返回包含文本范围容器的引用

示例4:

<script>
function getParElem()
{
var rng = document.selection.createRange();
var container = rng.parentElement();
alert(container.tagName);
}
</script>

这是只属于Body的文本
<div>这是包含在div里的文本</div>
<p>这是包含在p里面的文本</p>


摘自: http://hi.baidu.com/longtao_1986/blog/item/c95cae30fa666410ebc4afbb.html
从梯度泄露到数据复原:DLG与iDLG算法实战解析 本文深入解析了DLG与iDLG算法在梯度泄露与数据复原中的实战应用,揭示了联邦学习中的隐私风险。通过详细代码示例和实验数据,展示了如何从梯度中复原原始训练数据,并探讨了梯度压缩、差分隐私等防御措施。文章特别强调了iDLG算法在标签破解中的高效性,为AI安全领域提供了重要参考。 阅读详情

相关推荐

MAX31855电路和程序,实现SPI和软件模拟时序两种方式读取数据

1. 概述 MAX31855为热电偶至数字输出转换器,内置14位模/数转换器(ADC)。器件带有冷端补偿检测和修正、数字控制器、SPI兼容接口,以及相关的控制逻辑,在温度控制器、过程控制或监测系统中设计用于配合外部微控制器(μC)工作。提供多个版本的器件,每个版本针对特定的热电偶类型(K、J、N、T或E型)进行优化和调整。热电偶类型以器件型号后缀表示(例如MAX31855K)。 器件输出14位...

睿思派克 1万+

详探TextRange对象--查找与选择

table td {background-color:#EEEEEE;font-size:14px}.style1 { font-size: large; font-weight: bold;}.style6 {font-size: 12px}.style7 {color: #FF0000}.style8 { color: #00

人生如梦,一樽还酹江月 5919

SDIO_WiFi驱动学习之安卓WLAN架构介绍及调用流程分析

一、引言 上一篇博客大概介绍了MMC子系统和SDIO相关知识及架构,这一篇博客则大致分析安卓的WLAN架构及上层如何调用WLAN驱动的流程。 虽然我工作的开发环境是安卓系统,但由于我不是专业的安卓应用/框架开发工程师,所以对安卓层的一些代码并不是特别熟悉,只能大致梳理流程,不专业的地方请谅解。 本文部分内容摘抄自网络,若有侵权,请联系删除。 二、安卓WLAN架构 1、应用框架(Application framework) 在应用程序框架级别是应用程序代码,它使用各种android.net..

陈子陌的博客 5088

JS设置光标定位 --------JS moveStart和moveEnd方法

TextRange对象是动态HTML(DHTML)的高级特性,使用它可以实现很多和文本有关的任务,例如搜索和选择文本。文本范围让您可以选择性的将字符、单词和句子从文档中挑选出来。TextRange对象是在HTML文档将要显示的文本流上建立开始和结束位置的抽象对象。下面是TextRange的常用属性与方法:属性 boundingHeight 获取绑定TextRange对象的矩形的高度 boun

bbsdsz的博客 6871

[华为ensp]双核心的园区网

(给部分只会emm......借鉴的朋友提个醒,在group-member e0/0/2 to e0/0/20是所选,所以到了p l t那会给2-20端口都配置上trunk,别紧张,不是你问题)完成上述配置后,PC1可以ping通HTTP2服务器,Client1可以访问HTTP2服务器的HTTP站点,如果不能就要检查上述是否正确。本次实验主要目的是采用双核心的冗余网络,采用MSTP和VRRP技术,在核心层交换机上配置SC1上配置OSPF协议。SC1交换机上配置VRRP。在SC1上配置DHCP。

2301_78859499的博客 1416

Android车载桌面开发实战:从CarLauncher源码解析到自定义Launcher开发(Android 11)

本文深入解析了Android 11中CarLauncher的源码架构与核心模块,并提供了从零开始定制开发车载Launcher的完整实战指南。内容涵盖车载桌面的独特定位、驾驶场景优化、多屏协同、动态内容嵌入等核心挑战,以及如何构建符合安全规范、体验流畅的自定义车载桌面应用,是车载应用开发者提升系统级定制能力的实用参考。

weixin_29266647的博客 515

TextRange对象参考

原文来自TextRange object。 textRange对象代表document中一个连续的部分。 TextRange对象为实现一些实用功能提供了几个属性和方法。利用TextRange对象,你可以取得并修改文档的任意部分;你可以得到文档中的一个连续部分的定位以及一些其它的几何属性;你可以取得并修改文档中已选中的内容。 Inter...

weixin_34007906的博客 490

微信小程序网关逆向分析:从协议、签名到会话管理的安全架构剖析

在现代Web与移动应用开发中,API网关作为客户端与后端服务之间的关键通信枢纽,承担着协议转换、流量调度、安全防护与性能优化等核心职责。其工作原理通常涉及统一的请求路由、身份认证、参数校验与响应聚合。从技术价值看,深入理解网关机制不仅能帮助开发者构建更健壮、可扩展的微服务架构,还能为安全评估、性能调优与故障排查提供基础。在移动生态如微信小程序中,网关设计尤为关键,它需要处理微信特有的登录态、数据加密与防重放攻击等安全需求。本文聚焦于微信小程序网关的逆向分析方法,通过结合网络抓包与代码反编译技术,深入解析其通

weixin_29323493的博客 442

富文本编辑器开发系列7——textRange对象详解

在浏览器和更早版本的浏览器中,是没有提供用来表示选区的对象的的,但是它们依旧有可编辑区域的相关能力,是因为它们提供了另一个对象接口:对象[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WYpG3x4R-1655347848546)(https://gitee.com/hjb2722404/tuchuang/raw/master/img/20201210162002.png)]我们先直观地看一下这些属性。我们有下面一段代码: 再来看页面中选中一个选区后各个属性所指向的从上面的思维

林中路 952

QGIS|如何将WGS84转换为CGCS 2000坐标系?

QGIS 3中如何将WGS84转换为国家2000大地坐标系? 今天来回答一位朋友在后台留言提出的问题:怎么将WGS84坐标转换为国家2000大地坐标系。 01工程坐标系 从地图窗口右下角的状态栏可以看到当前地图窗口的坐标系,即工程坐标系(Project CRS)。当前地图可以由多个图层组成,各种来源数据的坐标参照系(Layer CRS)并不一定相同,QGIS在绘制图层之前将根据工程坐标系进行动态坐标转换,然后显示在地图画布中。 因此,在处理空间数据的过程中,一定要特别注意...

QGISClass的博客 1万+

详解AXI4-Lite接口(3)--AXI4-Lite接口IP源码仿真及分析(Master接口)

通过本文您会学到:1、了解AXI4-Lite_Master接口的逻辑实现;2、加深Xilinx IP、仿真工具的使用;3、提高阅读时序图的能力。

孤独的单刀 6445

JavaScrip常用方法

event.keyCode:按下的键的代码 window.getSelection()和document.getSelection(): 获取光标选中的数据,屏幕取词;IE9以下支持:document.selectionIE9、Firefox、Safari、Chrome和Opera支持:window.getSelection() slice(start,end):从已有的数组中返回选定的元素 JS获取文本框焦点光标位置、选中起始位置、终止位置、选择内容: selectionStart:选...

xing3037的博客 1184

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

理解HTML5中Range对象

1.理解Range对象 重新来学习下HTML5中的Range对象和Selection对象,最近在维护富文本编辑器,感觉这方面的知识点很有用,所以趁着周末多学习下~ 什么是Range对象? 在HTML5中,一个Range对象代表页面上的一段连续区域。可以通过如下语句创建一个空的Range对象。如下代码: var range = document.createRange();...

weixin_30755393的博客 571

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Range、Selection、TextRange对象的区别与关系

Range、Selection、TextRange对象的区别与关系什么是Range所谓Range,是指HTML文档中任意一段内容。一个Range的起始点和结束点位置任意,甚至起始点和结束点可以是一样的(也就是空Range)。最常见的Range是用户文本选择范围(user text selection)。当用户选择了页面上的某一段文字后,你就可以把这个选择转为Range。当然,你也可以直接用程序定义R

一个有味道的Weber 3105

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

javascript中createTextRange用法(focus)

  createtextrange createrange区别: 对象或元素不同,虽然都是返回TextRange。例如:     var r=document.body.createTextRange()    var r=document.createRange()  document. createTextRange 可以对body、TEXTAREA、BUTTON创建TextRange...

wing123123的博客 1905

光标的帖子总结(Range的使用)

     先说说TextRange      的常用方法            collapse([bStart])        移动Range的插入点        bStart      true(移到开头)      false(移到末尾)            findText(sText      [,      iSearchScope]      [,      iFlags]) 

555

TextRange对象与Range对象的使用

今天看到对TextRang对象和Range对象的说明,写的不错,可惜文中的举例的html代码格式太乱,很难阅读,这里整理下,方便以后的阅读。 TextRange对象是动态HTML(DHTML)的高级特性,使用它可以实现很多和文本有关的任务,例如搜索和选择文本。文本范围让您可以选择性的将字符、单词和句子从文档中挑选出来。TextRange对象是在HTML文档将要显示的文本流上建立开始和结束位置的抽

0溺水的鱼O的专栏 4133

document.selection 的 createRange()方法汇总

document.selection 的 createRange INPUT{border: 1 solid #000000} BODY,TABLE{font-size: 10pt} 实例一

DaiDaiLiu的专栏 3235

比较深入的认识一下textrange

textrange是一个很有用的玩意,今天仔细研究了一下,弄了几个典型的例子,估计都是有可能被用到的情形。直接拷贝下面的代码到一个html文件就可以运行测试。写的比较粗。参考了1篇比较好的文章:http://blog.sina.com.cn/s/blog_4b8d35b70100a047.html~type=v5_one&label=rela_nextarticledocument.b

sunxing007的专栏 6629

使用TextRange获取输入框中光标的位置

    TextRange是用来表现HTML元素中文字的对象,虽然我们平时不太常用这个对象,可是它却在IE4.0中就已提供了。不过TextRange提供的调用方法却都比较晦涩,那么我们能拿它做些什么呢?     TextRange的传统用途是对用户在Web页上用鼠标圈选的文字内容的操作,比如变化、删除、新增等。但其经典的用途却是,在Web页面中查找文字(这个比较简单)和获取输入框光标的位置。其中后...

weixin_34242658的博客 170

(转)使用TextRange对象

 使用TextRange对象一 对于文本处理,许多用户都只使用the innerText/innerHTML 和 outerText/outerHTML 属性和它的相关方法,然而使用文本范围对象将有许多高级的文本操作。TextRange对象可以如下使用: 1、定位给定元素或给定点的文本 2、在文档字符里查找单词或字符 3、移动逻辑单元里的文本 4、提供文档里平常的文

溺水的鱼 - Later equals never. 1027

深入解析Rangy TextRange模块:文本选择与操作实战指南

Rangy库的TextRange模块为开发者提供了强大的文本选择和操作能力,本文将深入解析该模块的核心功能并通过实际案例展示其应用场景。 ## 一、TextRange模块概述 TextRange模块是Rangy库的重要组成部分,它扩展了浏览器原生的文本选择功能,提供了以下核心能力: 1. 精确的字符级和单词级文本选择 2. 高级文本搜索与高亮功能 3. 基于字符索引的选择保存与恢复 4. 光

gitblog_01192的博客 608

range对象实现DOM精确操作

range对象实现DOM精确操作Range定义使用方法使用场景CSSOMDOM操作的实现case MDN接口文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Range Range定义 我们先来看下MDN对range对象的定义:Range 接口表示一个包含节点与文本节点的一部分的文档片段。 使用方法 我们可以用 Document 对象的 Document.createRange 方法创建 Range,也可以用 Selection 对象的 getRange

yfm120750310的博客 670

JavaScript 中获取光标位置

1.概念和原理 DOM中并没有直接获取光标位置的方法,那么我们只能间接来获取光标位置。DOM支持获取光标选中的范围,我们可以以此为切入点,来获取或定位光标的位置,当选取范围起始点和结束点一样时,就是光标插入的位置。 1.1. 术语 anchor:选区起点。 focus:选区终点。 range:选区范围,包含整个节点或节点的一部分。 1.2. Selection Selection对象......

分享前端工程化、AI 应用、Agent 开发与大模型实践! 8903
上一篇: jstl
下一篇: 如何用js实现,在一个页面有个输入文档框,然后点击查询按扭后,调用IE的查询功能在当前页面进行查询
wangle100wangle
博客等级 码龄19年 16粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值