Range对象代表页面上一段连续的区域,通过Range对象可以获取或者修改页面上任何区域的内容。也可以通过Range的方法进行复制和移动页面任何区域的元素。在Js的document文档中有一个方法用来创建一个Range对象,代码如下:
var range = document.createRange();
在html5中,每一个浏览器窗口都会有一个selection对象,代表用户鼠标在页面中所选取的区域,(注意:经过测试IE9以下的浏览器不支持Selection对象), 可以通过如下语句创建selection对象;
var selection = document.getSelection(); 或者var selection = window.getSelection();
每一个selection对象都有一个或者多个Range对象,每一个range对象代表用户鼠标所选取范围内的一段连续区域,在firefox中,可以通过ctrl键可以选取多个连续的区域,因此在firefox中一个selection对象有多个range对象,在其他浏览器中,用户只能选取一段连续的区域,因此只有一个range对象。可以通过selection对象的getRangeAt方法来获取selection对象的某个Range对象,如下:getRangeAt方法有一个参数index,代表该Range对象的序列号;我们可以通过Selection对象的rangeCount参数的值判断用户是否选取了内容;1.当用户没有按下鼠标时候,该参数的值为0.2.当用户按下鼠标的时候,该参数值为1.3.当用户使用鼠标同时按住ctrl键时选取了一个或者多个区域时候,该参数值代表用户选取区域的数量。4.当用户取消区域的选取时,该属性值为1,代表页面上存在一个空的Range对象;测试代码如下:
selection对象与range对象的使用实例
效果:
spanHello World
collapsed:起点和结束点在一起时为true;Range对象为空(刚createRange()时)也为true。commonAncestorContainer第一个包含Range的节点,同时包含起点和结束点。
setStart(node, offset)和setEnd(node, offset)setStart:设置起点的位置,node是对startContainer的引用,偏移则是startOffset;setEnd:设置结束点的位置,node是对endContainer的引用,偏移则是startOffset;代码如下:
这段文字是用来删除的 删除文字
setStartBefore(referenceNode)、setStartAfter(referenceNode)setEndBefore(referenceNode)、setEndAfter(referenceNode)setStartBefore:将“起点”设置到referenceNode前setStartAfter:将“起点”设置到referenceNode后setEndBefore:将“结束点”设置到referenceNode前setEndAfter:将“结束点”设置到referenceNode后注意:使用这四个方法设置的“起点”或“结束点”的父节点与referenceNode的父节点是同一个元素。代码如下:
内容1 内容2 内容3 内容4 删除第一行
selectNode(referenceNode)和selectNodeContents(referenceNode)selectNode:设置Range的范围,包括referenceNode和它的所有后代(子孙)节点。selectNodeContents:设置Range的范围,包括它的所有后代节点。二者的区别:
这里是随便书写的内容 克隆
这里是随便书写的内容
cloneContents()可以克隆选中Range的fragment并返回改fragment。这个方法类似extractContents(),但不是删除,而是克隆。代码如下:
deleteContents()从Dom中删除Range选中的fragment。注意该函数没有返回值(实际上为undefined)。代码如下:
这里是随便书写的内容 删除
extractContents()将选中的Range从DOM树中移到一个fragment中,并返回此fragment。代码如下:
你好吗? 移动元素
insertNodeinsertNode方法可以插入一个节点到Range中,注意会插入到Range的“起点”。代码如下:
Hello World
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对象的边界。detach()虽然GC(垃圾收集器)会将其收集,但用detach()释放range对象是一个好习惯。语法为:oRange.detach();toString()返回该范围表示的文档区域的纯文本内容,不包含任何标签;