理解Selection对象

Selection对象的属性如下:
var selection = window.getSelection();
console.log(selection);
通过上面的代码在控制台查看;

anchorNode: {node} 节点; 包含了用户选取内容的起点的节点。
anchorOffset {int} 整型值: 用户选取内容的起点与anchorNode属性值所返回的节点的起点之间的距离。
focusNode {node} 节点: 包含了用户选取内容的终点的节点。
focusOffset {int} 整型值: 用户选取内容的终点与focusNode属性值所返回的节点终点之间的距离。
isCollapsed {Boolean} 布尔型 当属性值为true,表示用户选取的内容的起点与终点位于相同的位置。
rangeCount {int} 整型值,表示用户选取内容中包含多少个Range对象。

Selection对象的方法
1 理解使用 addRange方法,removeAllRanges方法与removeRange方法
removeAllRanges: 该方法用于将用户当前选取的所有内容设定为非选取状态,使用方法如下:
selection.removeAllRanges();
下面使用一个demo来理解下该方法的含义,页面上有一个div,div里面有一些文字,还有一个 "取消选取"的按钮,用户选取页面上的一些内容后,单击 "取消选择"按钮时
将会取消对这些内容的选取。代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div>adsasddsadsaads</div>
<button onclick="removeAllRanges()">取消选择</button>
<button>一般的按钮点击看效果没有反应--对比下</button>
<script>
function removeAllRanges() {
var selection = window.getSelection();
selection.removeAllRanges();
}
</script>
</body>
</html>

查看效果

addRange: 该方法用于将一个Range对象添加到Selection对象中,该Range对象中所包含的内容将变为高亮选取状态。
在firefox中:用户可以按住ctrl键的方法同时选取多个不连续区域,因此可以使用selection对象中的addRange方法,在Selection对象中添加多个Range对象。
在chrome,safari及IE9中,一次只能选取一个连续区域,因此只能添加一个Range对象。
使用代码如下:
selection.addRange(rangeObj);
该参数的含义是:需要被添加到Selection对象中的Range对象。
demo如下:页面上有2个div元素,div元素中有一些文字,和一个 "选取第一个文字"的按钮,用户可以通过单击 "选取第一行文字" 按钮来使第一行文字处于高亮选取状态,
页面上还有二个按钮,一个按钮为 "取消选择文字" 和 “选中第一行文字中第二个到第四个文字” 按钮,为了更好的对比,可以查看效果;
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div id="firstLine">第一行文字</div>
<div>第二行文字</div>
<button onclick="selectFirstLine()">选择第一行文字</button>
<button onclick="removeAllRanges()">取消选择文字</button>
<button onclick="selectContent()">选中第一行文字中第二个到第四个文字</button>
<script>
function selectFirstLine() {
var firstLine = document.getElementById("firstLine");
var selection = window.getSelection();
var rangeObj = document.createRange(); rangeObj.selectNodeContents(firstLine);
// 所有内容变为非选取状态
selection.removeAllRanges(); // 然后自动选取某个区域
selection.addRange(rangeObj);
}
function removeAllRanges() {
var selection = window.getSelection();
selection.removeAllRanges();
}
function selectContent() {
var firstLine = document.getElementById("firstLine");
var textNode = firstLine.firstChild;
var selection = window.getSelection();
var rangeObj = document.createRange();
rangeObj.setStart(textNode, 1);
rangeObj.setEnd(textNode, 3); // 所有内容变为非选取状态
selection.removeAllRanges(); // 然后自动选取某个区域
selection.addRange(rangeObj);
console.log(selection.toString()); // 打印第二个到第四个文字
}
</script>
</body>
</html>

查看效果

removeRange: 该方法用于从Selection对象中移除一个指定的Range对象,该Range对象中所包含的内容将从高亮选取状态变为非选取状态。
使用方法如下:
selection.removeRange(rangeObj);
使用方法类似 removeAllRanges()
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div id="firstLine">第一行文字</div>
<div>第二行文字</div>
<button onclick="selectFirstLine()">选取第一行文字</button>
<button onclick="unselect()">取消选择</button> <script>
var rangeObj;
function selectFirstLine() {
var firstLine = document.getElementById("firstLine");
var selection = window.getSelection();
rangeObj = document.createRange();
rangeObj.selectNodeContents(firstLine);
selection.removeAllRanges();
selection.addRange(rangeObj);
}
function unselect() {
var selection = window.getSelection();
if (selection.rangeCount > 0) {
selection.removeRange(rangeObj);
}
}
</script>
</body>
</html>

查看效果

2. 理解使用 collapse方法,collapseToStart方法与collapseToEnd方法
collapse: Selection对象的collapse 方法用于将用户当选取范围的起点与终点移动到一个指定位置,使用户选取范围内不包括任何内容。
简单的理解就是不让用户选取内容。
使用方法如下:
selection.collapse(parentNode, num);
参数 parentNode 含义是:指定位置的节点。
参数num的含义是:{int}整型值;
当第一个参数parentNode节点为内容时,该参数值用于指定将第几个文字的结束位置作为collapse方法所使用的指定位置。
当第一个参数parentNode节点中包括其他子节点时,该参数值用于指定将第几个子节点的结束位置作为collapse方法使用的指定位置。

下面是一个demo,页面上有一个div元素有一些文字内容,每次用户用鼠标选取div元素中的文字时,当鼠标左键被松开时使用Selection对象的
collapse方法取消用户选取的文字,使用户永远无法选取div元素中的文字。
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div onmouseup="unSelect()" contenteditable="true" style="width:400px;background-color: #e0f0d0;">adasadsdasdsadsa</div>
<script>
function unSelect() {
var selection = window.getSelection();
selection.collapse(selection.anchorNode, selection.anchorOffset);
}
</script>
</body>
</html>

查看效果

collapseToStart:将用户当前选取范围的终点移动到起点,使用户选取范围内不包含任何内容。
该方法和上面的collapse方法还是有区别的,虽然也是不选中任何内容,但是光标的位置变了,选取某一段文字后的终点文字会为作为光标的起点位置;
使用方式如下:
selection.collapseToStart();
下面是一个demo,页面上有一个div元素,包含一些文字,每次用户鼠标选取div元素中的文字时,当鼠标左键被松开时,使用Selection对象的collapseToStart方法
取消用户选取的文字,使用户用于无法选取div元素中的文字,代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div onmouseup="unSelect()" contenteditable="true" style="width:400px;background-color: #e0f0d0;">adasadsdasdsadsa</div>
<script>
function unSelect() {
var selection = window.getSelection();
selection.collapseToStart();
}
</script>
</body>
</html>

查看效果

collapseToEnd:用于将用户当前选取范围的起点移动到终点处,使用户选取范围内不包括任何内容。
该方法的光标永远在选取的文字的最后。
使用方法如下所示:
selection.collapseToEnd();
下面是一个demo,页面上显示一个div元素,div元素中显示一些文字,每次用户鼠标选取div元素中的文字,当鼠标左键被松开时,使用Selection对象的collapseToEnd方法取消用户选取的文字,使用户永远无法选取div元素中的文字。
代码如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div onmouseup="unSelect()" contenteditable="true" style="width:400px;background-color: #e0f0d0;">adasadsdasdsadsa</div>
<script>
function unSelect() {
var selection = window.getSelection();
selection.collapseToEnd();
}
</script>
</body>
</html>

查看效果

3. 理解使用 deleteFromDocument方法
该方法用于将用户选取的内容从页面中删除,使用方法如下所示:
selection.deleteFromDocument();
下面是一个demo,来理解下该方法的使用;页面上有一个div元素,div元素中显示一些文字,每次用户使用鼠标选取div元素中的文字,当鼠标左键被松开时,使用Selection对象的deleteFromDocument方法可以将用户选取的文字从页面中删除。
代码如下所示:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div onmouseup="removeSelection()" contenteditable="true" style="width:400px;background-color: #e0f0d0;">adasadsdasdsadsa</div>
<script>
function removeSelection() {
var selection = window.getSelection();
selection.deleteFromDocument();
}
</script>
</body>
</html>

查看效果

4. 理解使用extend方法
该方法用于将用户选取范围的终点移动到指定位置。
使用方法如下:
selection.extend(focusNode, focusOffset);
参数focusNode代表指定位置所在的节点。
参数focusOffset 为一个整型值;当第一个参数focusNode所代表的节点是文字内容时,该参数值用于指定将第几个文字的结束位置作为用户选取范围的终点。
当第一个参数focusNode所代表节点中包括其他子节点时,该参数值用于指定将第几个子节点的结束位置作为用户选取范围的终点。
下面来看一个demo,演示下该方法的含义:
页面上有一个div元素,该元素内有一些文字,每次用户鼠标选取div元素中的文字,当鼠标左键被松开时,使用selection对象的extend方法将div元素中的剩余文字设定为高亮选取状态。
如下代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div onmouseup="extend()" contenteditable="true" style="width:400px;background-color: red">asdsddsawwwdwassdxcdff</div>
<script>
function extend() {
var selection = window.getSelection();
if (!selection.isCollapsed) {
// selection.isCollapsed 当属性值为true,表示用户选取的内容的起点与终点位于相同的位置
if (selection.focusNode.nodeType == Node.TEXT_NODE) {
// 如果选取内容在一个文字节点内
var selRange = selection.getRangeAt(0); // 如果用户鼠标反向选取页面内容
if (selRange.startContainer == selection.focusNode &&
selRange.startOffset == selection.focusOffset) {
selection.extend(selection.focusNode, 0);
} else {
// 如果用户鼠标正向选取页面内容
selection.extend(selection.focusNode, selection.focusNode.textContent.length);
}
}
}
}
</script>
</body>
</html>

查看效果

5. 理解使用selectAllChildren 方法
该方法用于取消当前用户选取内容,并且选取某个指定元素中的全部子元素。
使用方法如下:
selection.selectAllChildren(element);

如下demo
页面上有一个div元素,div元素中有一些文字,和一个 "选取元素"按钮,用户单击 "选取元素" 按钮时通过selection对象的selectAllChildren方法将div元素中的
全部文字设定为选取状态。

如下代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div id="myDiv">单击“选取元素”按钮将选取div元素中的全部文字</div>
<button onclick="selectContents()">选取元素</button>
<script>
function selectContents() {
var elementNode = document.getElementById("myDiv");
var selection = window.getSelection();
selection.selectAllChildren(elementNode);
}
</script>
</body>
</html>

查看效果

6. toString方法
该方法和Range对象的toString方法类似,Selection对象的toString方法用于获取用户选取范围内的全部文字内容。使用方法如下:
selection.toString();

请看如下demo,页面上有一个div元素和一个显示内容的按钮,用户单击 显示内容 按钮时 在弹出的提示信息窗口中会显示用户选取的全部文字。如下代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" name="viewport">
<title>标题</title>
</head>
<body>
<div id="myDiv" style="color: red">adssdsdasdadsadsds</div>
<button onclick="selectText()">显示内容</button>
<script>
function selectText() {
var selRange = window.getSelection();
alert(selRange.toString());
}
</script>
</body>
</html>

查看效果

理解Selection对象的更多相关文章

  1. 处理Selection对象和Range对象——Word VBA中重要的两个对象

    处理Selection对象和Range对象——Word VBA中重要的两个对象 Word 开发人员参考Selection 对象代表窗口或窗格中的当前所选内容.所选内容代表文档中选定(或突出显示)的区域 ...

  2. w3c标准的selection对象介绍

    简介 术语 属性 方法 document.activeElement document.designMode = 'on'; 简介 selection是对当前激活选中区(即高亮文本)进行操作. 在非I ...

  3. 彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇)

    本文同步自我的个人博客: http://mly-zju.github.io/ 众所周知javascript语言的一大特色就是异步,这既是它的优点,同时在某些情况下也带来了一些的问题.最大的问题之一,就 ...

  4. 理解javascript 对象,原型对象、闭包

    javascript作为一个面向对象的语言,理解 对象.原型.闭包.模块模式等技术点对于成为一名合格的javascript程序员相当重要,多年没写过blog,今天就先拋个玉,在下基本也不做前端,但颇感 ...

  5. js对象详解(JavaScript对象深度剖析,深度理解js对象)

    js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...

  6. 编辑器开发之 Selection 对象的学习

    上一篇,介绍了 range 对象的一些属性和方法,了解了一些基本操作,现在来介绍另外一个重要的对象:selection 对象: MDN 的解释是:Selection 对象表示用户选择的文本范围或插入符 ...

  7. js selection对象使用方法

    IE:document.selection FireFox:window.getSelection() document.selection只有IE支持,window.getSelection()也只 ...

  8. HTML5 Selection对象

    一.实例1,设置网页选中内容并且复制到黏贴板 <p id='txtone'>发的FDSAFSDFDS!其实不管哪个行业, <img src='http://beijing.gongj ...

  9. Java基础之深入理解Class对象与反射机制

    深入理解Class对象 RRIT及Class对象的概念 RRIT(Run-Time Type Identification)运行时类型识别.在<Thinking in Java>一书第十四 ...

随机推荐

  1. Java学习笔记之——常用快捷键(eclipse)

    * Ctrl+C 复制 * Ctrl+V 粘贴 * Ctrl+A 全选 * Ctrl+S 保存 * Ctrl+Z 撤销 * Ctrl+Y 还原 * Ctrl+X 剪切 * Ctrl+F   查找 * ...

  2. HDU2196(SummerTrainingDay13-D tree dp)

    Computer Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  3. Spark 跑 java 示例代码

    一.下载示例代码: git clone https://github.com/melphi/spark-examples.git 从示例代码中可以看到 pox中引入了 Spark开发所需要的依赖. 二 ...

  4. 2017-07-29 中文代码示例教程之Java编程一天入门

    Java编程一天入门 v0.0.1 alpha 共享协议 本作使用署名-非商业使用-禁止演绎协议共享. 前言 Java入门代码用中文写(举例如下)更能被新手理解. 由于至今没有看到类似教程, 在此抛砖 ...

  5. 记一次wepy里面的渲染问题(this.$apply()的使用)

    今天在用wepy搞小程序的时候遇到了一个小坑,卡了我好一会,因为之前在做React,所以对wepy的了解不是特别深入,所以导致了这个问题的发生 先贴上来关键代码让大家看一看(备注之处是问题解决的方法) ...

  6. python自动化开发-5a

    python的常用模块 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护.为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包 ...

  7. JQuery请求数据的方式

    /*$.ajax常用的几个参数 // 1.url:要求为String类型的参数,(默认为当前页地址)发送请求的地址. // 2.type:要求为String类型的参数,请求方式(post或get)默认 ...

  8. JavaScript日期排序

    //日期排序 function sortDownDate(a, b) { return Date.parse(a.received) - Date.parse(b.received); } funct ...

  9. ios开发GCD(2)-dispatch_semaphore_t信号量计数器

    思考:现在有多个线程异步执行,我们想要同时最多只能执行2个或n个,该怎么办? dispatch_semaphore_t 看代码解析: NSLog(@"开始"); dispatch_ ...

  10. [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt

    [20180317]12c TABLE ACCESS BY INDEX ROWID BATCHED2.txt --//简单探究12c TABLE ACCESS BY INDEX ROWID BATCH ...