HTML5
发布时间:2022-04-25 发布网站:大佬教程 code.js-code.com
大佬教程 收集整理的这篇文章主要介绍了HTML5中的Range对象的研究 ,大佬教程 大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
Range对象代表页面 上的一段连续区域,通过Range对象,可以获取 或修改页面 上的任何区域,可以通过如下创建一个 空的Range对象,如下: var range = document.createRange(); 在html5中,每一个 浏览器窗口及每一个 窗口中都有一个 SELE ction对象,代表用户 鼠标在页面 中所选取的区域,(注意:经过测试IE9以下的浏览器不支持 SELE ction对象),可以通过如下语句创建SELE ction对象;var SELE ction = document.getSELE ction(); 或者var SELE ction = window.getSELE ction(); 每一个 SELE ction对象都有一个 或者多个Range对象,每一个 range对象代表用户 鼠标所选取范围内的一段连续区域,在firefox中,可以 通过ctrl键可以选取多个连续的区域,因此在firefox中一个 SELE ction对象有多个range对象,在其他浏览器中,用户 只能选取一段连续 的区域,因此只有一个 range对象。 可以通过SELE ction对象的getRangeAt方法 来获取 SELE ction对象的某个Range对象,如下:var range = document.getSELE ction().getRangeAt(indeX) ; getRangeAt方法 有一个 参数index,代表该Range对象的序列号;我们可以通过SELE ction对象的rangeCount参数的值判断用户 是否选取了内容 ; 1、当用户 没有按下鼠标时候,该参数的值为0. 2、当用户 按下鼠标的时候,该参数值为1. 3、当用户 使用鼠标同时按住ctrl键时选取了一个 或者多个区域时候,该参数值代表用户 选取区域的数量 。 4、当用户 取消区域的选取时,该属性 值为1,代表页面 上存在一个 空的Range对象;
如下代码 测试:
<h3>SELE ction对象与range对象的使用实例</h3>
<input type="button" value="点击我" onclick="rangetest() "/>
<div id="showRange"></div>
JS代码 如下:
<script>
function rangetest() {
var html, showRangeDiv = document.getElementById("showRange"), SELE ction = document.getSELE ction();
if(SELE ction.rangeCount > 0) {
html = "你选取了" + SELE ction.rangeCount + "段内容 <br/>";
for(var i = 0; i < SELE ction.rangeCount; i++) {
var range = SELE ction.getRangeAt(i);
html += "第" + (i + 1) + "段内容 为:" + range + "<br/>";
}
showRangeDiv.innerHTML = html;
}
}
</script>
如上代码 ,当用户 选取一段文字 后,点击按钮,会显示 选取的文字 ,如下在firefox下效果 :
在chrome浏览器下如下所示:
属性 如下:collapsed(@R_874 _8487@an) : 用于判断Range对象所代表的区域的开始点与结束点是否处于相同的位置,如果相同该属性 值返回true;commonAncestorContainer(nodE) : 用于返回Range对象所代表的区域位于什么节点之中,该属性 值为包含了该区域的最低层节点(一个 节点可能是一个 元素,也可能是一段完整文字 )的节点。endContainer(nodE) : 用于返回Range对象所代表的区域的终点位于什么节点之中,该属性 值为包含了该区域终点的最底层节点。endOffset(整数值类型 ): 用于返回Range对象所代表的区域的终点与包含该终点的节点的起点之间的 距离。startContainer(nodE) : 用于返回Range对象所代表的区域的起点位于什么节点之中,该属性 值为包含了该区域起点的最底层节点。startOffset(整数值类型 ): 用于返回Range对象所代表的区域的起点与包含该起点的节点的起点之间的 距离。 下面还有很多方法 ,方法 的含义比较难理解,我这边也是看到书上这么写的,顺便 自己做了 demo试了下 ,理解下其含义。以后需要使用到的可以看一下即可;SELE ctNode方法 : Range对象的SELE ctNode方法 用于将Range对象的起点指定为某个节点的起点,将Range对象的终点指定为该节点的终点,使Range对象所代表的区域中包含该节点。使用方法 如下: rangeObj.SELE ctNode(nodE) ; 上面的rangeObj代表一个 Range对象,该方法 使用一个 参数,代表页面 中的一个 节点。SELE ctNodeContents方法 : 用于将Range对象的起点指定为某个节点中的所有内容 的起点,将Range对象的终点指定为该节点所有内容 的终点,使Range对象所代表的区域中包含该节点的所有内容 。使用方法 如下: rangeObj.SELE ctNodeContents(nodE) ; 含义如上所示;delet eContents方法 : 用于将Range对象中所包含的内容 从页面 中删除 ,使用方法 如下所示: rangeObj.delet eContents(); 我们下面来做一个 demo,来理解下上面的三个方法 ;如下代码 :
<div id="div" style="BAC kground-color:#e0a0b0;width:300px;height:50px;">元素中的内容 </div>
<button onclick="delet eRangeContents(true) ">删除 内容 </button>
<button onclick="delet eRangeContents(false) ">删除 元素</button>
页面 上显示 如下:
JS代码 如下:
<script>
function delet eRangeContents(flag) {
var div = document.getElementById("div");
var rangeObj = document.createRange();
if(flag) {
// SELE ctNodeContents指选中Range对象中的所有内容 进行删除 掉
rangeObj.SELE ctNodeContents(div);
rangeObj.delet eContents();
}else {
rangeObj.SELE ctNode(div);
rangeObj.delet eContents();
}
}
</script>
当代码 执行完document.createRange(); 时候,我们看看rangeObj对象的值是多少
当点击删除 内容 的时候,就把相应的 内容 删掉;如下所示:
代码 执行到下面的,rangeObj对象的值变成如下:
当我们点击删除 元素的按钮时候,如下所示:
此时rangeObj对象变成如下:
setStart方法 用于将某个节点中的某处位置指定为Range对象所代表区域的起点位置,使用
方法 如下:
rangeObj.setStart(node,curInde
X) ;
如 上
代码 rangeObj代表
一个 Range对象,该setStart
方法 使用2个参数,第
一个 参数node代表
一个 节点,第二个参数是
一个 数字,当第
一个 参数node所代表的节点是
一个 内容 为一段
文字 的
文字 节点时,该参数值用于指定将第几个
文字 的结束位置作为Range对象所代表的区域的起点位置;当第一 个参数node所代表的节点中
包括 其他子节点时,该参数值用于将第几个子节点的结束位置指定为Range对象所代表的区域的起点位置;
setEnd方法 用于将某个节点中的某处位置指定Range对象所代表区域的结束位置。使用
方法 如下所示:
rangeObj.setEnd(node,curInde
X) ;
该
方法 中的2个参数的含义如setStart
方法 中参数的含义相同;
只不 过
一个 是起点位置,另
一个 是结束位置;
我们来看
一个 demo,来理解下上面的2个
方法 的含义;
代码 如下:
<div id="myDiv">这段文字 中第三个文字 到第十个文字 将被删除 掉</div>
<button onclick="delet eChar()">删除 文字 </button>
JS代码 如下:
<script>
function delet eChar(){
var myDiv = document.getElementById("myDiv");
var textNode = myDiv.firstChild;
var rangeObj = document.createRange();
rangeObj.setStart(textNode,2);
rangeObj.setEnd(textNode,10);
rangeObj.delet eContents();
}
</script>
当我们点击删除 文字 按钮的时候,第3个到第10个文字 被删除 掉~setStartBefore方法 : 用于将某个节点的起点位置指定为Range对象所代表区域的起点位置。setStartAfter方法 : 用于将某个节点的终点位置指定为Range对象所代表区域的起点位置。setEndBefore方法 : 用于将某个节点的起点位置指定为Range对象所代表区域的终点位置。setEndAfter方法 : 用于将某个节点的终点位置指定为Range对象所代表区域的终点位置。 使用方法 如下所示: rangeObj.setStartBefore(nodE) ; rangeObj.setStartAfter(nodE) ; rangeObj.setEndBefore(nodE) ; rangeObj.setEndAfter(nodE) ; 我们还是先来做一个 demo,来理解下上面的四个方法 ;如下所示:
<table id="myT able" border = "1" cellspacing="0" celLPAD ding="0">
<tr>
<td>第一行第一列</td>
<td>第一行第二列</td>
</tr>
<tr>
<td>第二行第一列</td>
<td>第二行第二列</td>
</tr>
</table>
<button onclick="delet eFirstRow()">删除 第一行</button>
JS代码 如下所示:
<script>
function delet eFirstRow(){
var myT able = document.getElementById("myT able");
if(myT able.rows. length > 0){
var row = myT able.rows[0] ;
var rangeObj = document.createRange();
rangeObj.setStartBefore(row);
rangeObj.setEndAfter(row);
rangeObj.delet eContents();
}
}
</script>
如上代码 所示;用户 单击 删除 第一行按钮时候,表格的第一行将会被删除 掉;cloneRange方法 Range对象的cloneRange方法 用于对当前的Range对象进行复制,该方法 返回复 制的Range对象,该方法 使用如下所示: var rangeClone = rangeObj.cloneRange(); 我们可以先来看看一个 demo列子,如下所示:
<div id="test">aaaa</div>
<button onclick="cloneARange()">克隆Range对象</button>
JS代码 如下:
<script>
function cloneARange() {
var testObj = document.getElementById("test");
var rangeObj = document.createRange();
rangeObj.SELE ctNodeContents(testObj);
var rangeClone = rangeObj.cloneRange();
alert(rangeClonE) ;
}
</script>
如下图所示:
@H_797_403 @
cloneContents方法 该方法 用于在页面 上追加一段HTML代码 ,并且将Range对象所代表区域中的HTML代码 克隆到被追加的HTML代码 中; 使用方法 如下所示: var html = rangeObj.cloneContents(); 该方法 不使用任何参数,该方法 返回一个 DocumentFragment对象,该对象为一个 容器元素,当需要追加,删除 ,修改 或查找页面 上的元素,该对象变得非常有用; 如下代码 所示:
<div id="div">
实例文字
<br/>
<button onclick="cloneDivContent()">克隆</button>
</div>
JS代码 如下:
<script>
function cloneDivContent() {
var div = document.getElementById("div");
var rangeObj = document.createRange();
rangeObj.SELE ctNodeContents(div);
var documentFragment = rangeObj.cloneContents();
div.appendChild(documentFragment);
}
</script>
如上代码 ,用户 单击页面 上的克隆按钮后,将会把div元素中的内容 克隆到div元素底部 ;我们再来看看documentFragment对象的属性 如下:
extractContents方法 用于将Range对象所代表区域中的
HTML代码 克隆到
一个 DocumentFragment对象中,然后从
页面 中
删除 这段
HTML代码 ;
该
方法 使用方式如下:
var documentFragment = rangeObj.extractContents(
); 该
方法 返回
一个 包含了Range对象所代表区域中的
HTML代码 的DocumentFragment对象。
如下
代码 所示:
<div id="srcDiv" style="width:300px;height:50px;BAC kground-color:r ed;">demo</div>
<div id="destDiv" style="width:300px;height:50px;BAC kground:blue;">demo2</div>
<button onclick = "moveContent()">移动元素内容 </button>
JS代码 如下:
<script>
function moveContent() {
var srcDiv = document.getElementById("srcDiv");
var destDiv = document.getElementById("destDiv");
var rangeObj = document.createRange();
rangeObj.SELE ctNodeContents(srcDiv);
var documentFragment = rangeObj.extractContents();
destDiv.appendChild(documentFragment);
}
</script>
原页面 如下:
点击按钮后变成如下:
insertNode方法 : 该
方法 用于将指定的节点插入到某个Range对象所代表的区域中,插入位置为Range对象所代表区域的起点位置,如果该节点已经存在于
页面 中,该节点将被移动到Range对象代表的区域的起点处。使用
方法 如下:
rangeObj.insertNode(nod
E) ;
如下demo:
代码 如下:
<div onmouseup="MoveButton()" style="width:4 00px;height:1 00px;BAC kground-color:r ed">aaaaaaaaabbbb bb</div>
<button id="button">按钮</button>
JS代码 如下:
<script>
function MoveButton() {
var button = document.getElementById("button");
var SELE ction = document.getSELE ction();
if(SELE ction.rangeCount > 0) {
var range = SELE ction.getRangeAt(0);
range.insertNode(button);
}
}
</script>
页面 初始化的时候如下:
当在相应的 地方按下键的时候,变成如下:
以上是一些基本知识点;为了@L_805_197 @文档上传 图片 需要使用到的知识,可以先了解下一些基本知识点~
泥萌好,我是程序媛小编。做过电影、搞过设计、现在在做编程,我想和你们说,这个号我承包了。每天为大家奉上技术文章 、行业猛料、职场潜规则......作为一个 北漂,程序媛妹子深知咱们干程序的不易,夜深人静的夜晚不要一个 人哭泣,如果真的想找人倾诉一下,可以加我微信:xdlmeizi,请原谅我一生放荡不羁求关注,你是我的粉,我是你的 人。
大佬总结
以上是大佬教程 为你收集整理的HTML5中的Range对象的研究 全部内容,希望文章能够帮你解决HTML5中的Range对象的研究 所遇到的程序开发问题。
如果觉得大佬教程 网站内容还不错,欢迎将大佬教程 推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。 如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。