jsrange使用整理

star      2022-02-10     789

关键词:

Range对象的概念

Range对象代表页面上一段连续的区域,通过Range对象可以获取或者修改页面上任何区域的内容。也可以通过Range的方法进行复制和移动页面任何区域的元素,甚至可以通过Range对象获取并控制光标位置

获取页面Range对象

var  selection = window.getSelection();   
var  range = selection.getRangeAt(0);//getRangeAt方法获取range,参数为range下标

每一个selection对象都有一个或者多个Range对象,每一个range对象代表用户鼠标所选取范围内的一段连续区域,在firefox中,可以通过ctrl键可以选取多个连续的区域,因此在firefox中一个selection对象有多个range对象,在其他浏览器中,用户只能选取一段连续的区域,因此只有一个range对象。

创建Range对象

var range = document.createRange();

Range对象的属性和方法

(1)属性

startContainer
包含“起点”的节点。“包含”的意思是起点所属的节点。
endContainer
包含“结束点”的节点
startOffset
“起点”在startContainer中的偏移量。
如果startContainer是文本节点、注释节点或CDATA节点,则返回“起点”在startContainer中字符偏移量。
如果startContainer是元素节点,则返回“起点”在startContainer.childNodes中的次序。
collapsed
起点和结束点在一起时为true;Range对象为空(刚createRange()时)也为true。
commonAncestorContainer
第一个包含Range的节点,即同时包含Range的起点和结束点。

(2)定位(设置“起点”和“结束点”)的一些方法

setStart(node, offset)和setEnd(node, offset)
setStart:设置起点的位置,node是对startContainer的引用,偏移则是startOffset;
setEnd:设置结束点的位置,node是对endContainer的引用,偏移则是startOffset;
代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>range3</title>
 <script>
  function deleteChar() {
      var div = document.getElementById("myDiv");
      var textNode = div.firstChild;
      var rangeObj = document.createRange();
      rangeObj.setStart(textNode,1);
     rangeObj.setEnd(textNode,4);
     rangeObj.deleteContents();
}
</script>
</head>
<body>
     <div id="myDiv" style="color:red">这段文字是用来删除的</div>
     <button onclick="deleteChar()">删除文字</button>
</body>
</html>

setStartBefore(referenceNode)、setStartAfter(referenceNode)
setEndBefore(referenceNode)、setEndAfter(referenceNode)
setStartBefore:将“起点”设置到referenceNode前
setStartAfter:将“起点”设置到referenceNode后
setEndBefore:将“结束点”设置到referenceNode前
setEndAfter:将“结束点”设置到referenceNode后
注意:使用这四个方法设置的“起点”或“结束点”的父节点与referenceNode的父节点是同一个元素。
代码如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="application/javascript">
            function delrow(){
                var table=document.getElementById("mytable");
                if(table.rows.length>0){
                    var row=table.rows[0];
                    var rangeObj=document.createRange();
                    rangeObj.setStartBefore(row);
                    rangeObj.setEndAfter(row);
                    rangeObj.deleteContents();
                }
            }
        </script>
    </head>
    <body>
        <table id="mytable" border="1">
            <tr>
                <td>内容1</td>
                <td>内容2</td>
            </tr>
            <tr>
                <td>内容3</td>
                <td>内容4</td>
            </tr>
        </table>
        <button onclick="delrow()">删除第一行</button>
    </body>
</html>

selectNode(referenceNode)和selectNodeContents(referenceNode)
selectNode:设置Range的范围,包括referenceNode和它的所有后代(子孙)节点。
selectNodeContents:设置Range的范围,包括它的所有后代节点。

(3)修改范围的方法

cloneRange()
cloneRange()方法将返回一个当前Range的副本,它也是Range对象。
cloneContents()
可以克隆选中Range的fragment并返回改fragment。这个方法类似extractContents(),但不是删除,而是克隆
deleteContents()
从Dom中删除Range选中的fragment。注意该函数没有返回值(实际上为undefined)。
extractContents()
将选中的Range从DOM树中移到一个fragment中,并返回此fragment
insertNode
insertNode方法可以插入一个节点到Range中,注意会插入到Range的“起点”
collapse()
Range.collapse() 方法向边界点折叠该 Range 。

range.collapse(toStart);//toStart 可选,一个布尔值: true 折叠到 Range 的 start 节点,false 折叠到 end 节点。如果省略,则默认为 false .

(4)比较

compareBoundaryPoints()

var compare = comparerange.compareBoundaryPoints(how, sourceRange);

compare:返回1, 0, -1.(0为相等,1为时,comparerange在sourceRange之后,-1为comparerange在sourceRange之前)。
how:比较哪些边界点,为常数。
Range.START_TO_START - 比较两个 Range 节点的开始点
Range.END_TO_END - 比较两个 Range 节点的结束点
Range.START_TO_END - 用 sourceRange 的开始点与当前范围的结束点比较
Range.END_TO_START - 用 sourceRange 的结束点与当前范围的开始点比较
sourceRange:个Range对象的边界。

(5)其它

detach()
虽然GC(垃圾收集器)会将其收集,但用detach()释放range对象是一个好习惯。语法为:oRange.detach();

toString()
返回该范围表示的文档区域的纯文本内容,不包含任何标签;

注意点

除了火狐浏览器外。如果section中已经存在一个range了,再通过addRange添加range是无效

jqgrid使用整理

jqGrid使用整理jqGrid是一款处理表格展现的jQuery插件,支持分页、滚动加载、搜索、锁定、拖动等一系列对表格的常规操作。以下是最近项目中实践jqGrid的整理 1、引入到项目中来jqGrid的主页在http://www.trirand.com/blog/ ,上面... 查看详情

kafka笔记整理:kafkajavaapi使用

[TOC]Kafka笔记整理(二):KafkaJavaAPI使用下面的测试代码使用的都是下面的topic:$kafka-topics.sh--describehadoop--zookeeperuplooking01:2181,uplooking02:2181,uplooking03:2181Topic:hadoopPartitionCount:3ReplicationFactor:3Configs 查看详情

datatables使用整理

初次使用dataTables,对一些用到的属性及遇到的问题做一个简要的记录参考资料:http://blog.csdn.net/mickey_miki/article/details/8240477/http://q.cnblogs.com/q/45111/ 查看详情

commonjs和es6module的异同和使用整理(定期整理)

什么是模块化变量和函数在单独的文件中作用域私有减少全局变量避免函数和变量命名冲突 提高代码复用性、维护性 查看详情

afn的使用(待整理)

待整理一、文件下载1.创建下载//1.创建会话管理者AFHTTPSessionManager*manager=[AFHTTPSessionManagermanager];NSURL*url=[NSURLURLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"];NSURLRequest*request= 查看详情

ztree的使用整理

/**配置:知识点管理*/varsetting={view:{showIcon:false,addDiyDom:addPrevDom,addHoverDom:addHoverDom,removeHoverDom:removeHoverDom,selectedMulti:false},callback:{beforeDrag:beforeDrag,beforeDrop:beforeDrop,befo 查看详情

kendoui使用基础介绍与问题整理——dropdownlist/基础问题整理

  项目最近属于第一阶段的中后期,dropdownlist用的也算不少,首先对它的基本用法做一个整理。(插播一段:马未都的八字方针:自信坚强、认真宽容。马爷认为自信首先要拥有知识,然后要有勇气在公众面前表达。坚强... 查看详情

php初入,div知识点整理(特效&字体等元素的使用整理)

<!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <!--<style> /*.nav{ background-color:red;/*背景颜色*/ background-image:url(../01.j 查看详情

nodejs使用命令整理

查看NodeJs版本号:node-v安装npm模块:npminstall-g(全局安装)模块名安装npm模块指定从某个镜像地址安装:npminstall-g(全局安装)模块名--registry=https://registry.npm.taobao.org【例如从淘宝镜像下载安装】查看所有高级的npmmoudles:npmlist--depth=0查看... 查看详情

浅谈磁盘碎片整理的好处与方法

...,减少卡顿的现象,提高系统性能。2、需要注意的是,使用固态硬盘的用户千万不要使用“磁盘碎片整理”功能,因为所使用的技术不同,使用Windows自带的磁盘碎片整理会使固态硬盘的寿命大大减短。磁盘碎片整理的方法步骤... 查看详情

在 CONCAT 中使用整理

】在CONCAT中使用整理【英文标题】:UseCollateinCONCAT【发布时间】:2014-07-0314:19:57【问题描述】:我试图连接2列,中间有一个空格,结果出现排序错误:SELECTDISTINCTp.PERSON_ID,p.ID_NUMBER,CONCAT(p.FULLNAMES,CONCAT(\'\',p.SURNAME))ASNAME,o.ORG_NAME,w.W... 查看详情

datatables-使用详细说明整理

http://blog.csdn.net/mickey_miki/article/details/8240477********************************************  本文共四部分:官网|基本使用|遇到的问题|属性表一:官方网站:[http://www.datatables.NET/]二:基本使用:[http://www.guoxk.com/ 查看详情

使用代理方式整理

假设代理的域名是xxx.xxxx.xxxx.net端口是80801、pip使用代理pip--proxy=xxx.xxxx.xxxx.net:8080installpygame2、wget使用代理wgethttps://dl.minio.io/server/minio/release/linux-amd64/minio-euse_proxy=yes-ehttps_proxy=xxx.xxxx.xxx 查看详情

reportviewer报表使用整理(代码片段)

前段时间整理了ReportViewer报表控件安装步骤,今天整理了报表具体项目中详细步骤。1.首先从工具箱中引用ReportViewer控件 ,同时,新建report文件夹,添加*.rdlc报表。2.rdlc报表中添插入文本框,设置如图,这里引用参数ReportParame... 查看详情

plupload插件使用整理

Plupload参考:http://www.cnblogs.com/2050/p/3913184.htmlhttp://www.plupload.com/docs/js://上传,配置基本参数,事件,实例化functioninitPlupload(){//配置上传vm.uploader=newplupload.Uploader({runtimes:‘html5,flash‘,browse_butt 查看详情

newtonsoft.json的使用整理

...高效,方便地帮助我们处理json。NetonSoftJson提供了完整的使用文档,文档地址如下:Json.NETDocumentationNetonSoftJson的不同使用场景常用方法序列化和反序列化这应该是我 查看详情

bigdecimal使用整理(代码片段)

BigDecimal使用整理一、    BigDecimal简介计算机计算中无论是float还是double都是浮点数,由于计算机是二进制的,导致在在浮点数计算时会出现精度丢失,因此引入BigDecimal(java.math.BigDecimal)。Java在java.math包中提供的A... 查看详情

ctypes库的使用整理

Python中ctypes的使用整理ctypes是Python的一个外部库,提供和C语言兼容的数据类型,可以很方便地调用CDLL中的函数。ctypes的官方文档在这里。1.ctypes基本数据类型映射表参数类型预先设定好,或者在调用函数时再把参数转成相应的c_... 查看详情