引言

今天,看到一个简单的问题 “JavaScript 怎么实现复制黏贴?” …我尽不知如何回答。当然对于一些 JavaScript 实现复制黏贴的库我还是了解的,例如 clipborad.js。不过,回到问题根本,任何 JavaScript 库都是基于 JavaScript 的原生 API 设计的,后来了解一番,JavaScript 提供了 Selection 这个 API 来实现选中文本的复制黏贴。那么,接下来就来了解一下如何使用 Selection 。

属性

1.anchorNode
返回选中区域对应的节点

2.anchorOffset
返回选中区域的起始下标,需要注意起始下标会根据左右方向选择的次序不同来展示不同的下标。如果 anchorNode 是字符串则对应文字下标,anchorNode 是元素,则对应选中区域对应它之前的同级节点的数目。

3.focusNode
返回选中区域终点所在的节点。

4.focusOffset
与 anchorOffset 类似,如果是 focusNode 是字符串,则对应最后一个选中的字符所在的位置,focusOffset 是元素,则对应选中区域对应同级节点的总数。

5.rangeCount
返回选中的区域所对应的连续的范围内的数量。

6.type
返回选中区域所对应的类别是连续的 range,还是同一个位置的 isCollapsed。

方法

1.toString
返回当前选中区域的文本内容

2.containsNode(Node)
判断某个节点是否在选区内

3.addRange
将一个区域加入到当前选区中

PS:这里只罗列几个常用的,其他属性大家可以自行去 MDN 上看哈。

使用

获取选中的内容,并复制到剪切板:

var selection = window.getSelection();
document.addEventListener('mouseup', function() {if (selection.type === 'Range') {// 获取选区内容var selectedContent = selection.toString()// 执行复制命令document.execCommand('Copy')} else {console.log('you should select text!')}
})

接下来就可以黏贴了(Ctrl + V 或右键黏贴)。


PS:在没看 MDN 上的文档之前,我是这样获取选区的内容的(不推荐这样使用,但是可以深入了解一下 Selection 这个对象):

var selection = window.getSelection();
document.addEventListener('mouseup', function() {if (selection.type === 'Range') {var wholeSelectArea = selection.focusNode.wholeText// 开始位置var startInx = selection.anchorOffset// 结束位置var endInx = selection.focusOffsetvar selectedArea = startInx < endInx ? str.slice(startInx, endInx) : str.slice(endInx, startInx)} else {console.log('you should select text!')}
}

JavaScript——Selection相关推荐

  1. JavaScript 仿ios滑动选择器

    从git上找了一个,不过不是我想要的,更改了许多.到了我想要的效果: roller_selector_0_9.js 首先上js: "use strict";/** Author: ...

  2. CSS项目基础实战:实现小米官网+详细步骤分析+出错问题总结

    1.有关项目的基本结构:|--html 文件与 CSS 文件单独设置分开.|--在html中引入:|--重置样式表|--网页基本样式表:所有网页所共有使用的部分:网页宽度.网页字体.颜色.设置最小宽度 ...

  3. JavaScript标准Selection操作

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

  4. Requesting JavaScript AST from selection

    Requesting JavaScript AST from selection 修改方法: window–>preferences–>javascript->Editor–> ...

  5. JSP----An internal error occurred during: Requesting JavaScript AST from selection

    Eclipse Error - An internal error occurred during: "Requesting JavaScript AST from selection&qu ...

  6. 针对JavaScript的常用事件、对象捕获和使用技巧

    事件源对象  event.srcElement.tagName  event.srcElement.type  捕获释放  event.srcElement.setCapture();   event ...

  7. javascript 手势缩放 旋转 拖动支持:hammer.js

    原文: https://cdn.rawgit.com/hammerjs/hammer.js/master/tests/manual/visual.html /*! Hammer.JS - v2.0.4 ...

  8. Yahoo javascript 开源界面库YUI 和EXT

    清清月儿整理 [yui][译]Yahoo!User Interface Libray 介绍 Yahoo! User Interface Library(简称yui) 是一个使用JavaScript编写 ...

  9. Web API 接口-JavaScript全部api接口文档

    当使用JavaScript编写网页代码时,有很多API可以使用.以下是所有对象.类型等接口的列表,你在开发网页应用程序或站点时使用它们. API文档地址:https://developer.mozil ...

最新文章

  1. 如何建立JSP操作用以提高数据库访问效率
  2. 4、连接Mysql数据库
  3. JavaScript高级day02-AM【函数的prototype、显式原型与隐式原型、原型链】
  4. boost::function_types::is_member_object_pointer的用法测试程序
  5. Java中httpClient中的设置超时时间
  6. 在win10系统下安装ubuntu17.10以及基本配置
  7. 《Java编程规范学习笔记》
  8. office怎么像wps一样多栏_WPS文档分栏设置,让排版更完美 Word2010如何分两栏、三栏、多栏技巧...
  9. jar包太大?手把手教你分析 Maven 依赖,完成瘦身优化!
  10. 小程序学习笔记5---导航跳转
  11. [脚本]用windows批处理文件自动化Python(虚拟)环境的配置
  12. 运营_APP的常见盈利模式
  13. 作为前端,如何帮帝都的朋友租到合适的房子
  14. 2.Ext JS MVVM特性
  15. 普通壳的脱壳方法和脱壳技巧
  16. TUSCANY SCA JAVA (二) 入门
  17. python3 笔记9 字典
  18. 【转贴】linux操作系统下c语言编程入门
  19. Airplay相关协议
  20. 以手机为基础的移动互联网对我们生活的影响

热门文章

  1. C#中读取Excel表格数据实例
  2. 利用Go制作微信机器人(二)回复消息
  3. 跑步能戴耳机吗,五款适合跑步戴的耳机
  4. JVM 主要组成部分及其作用
  5. Z3约束器详细学习(0)—Z3安装|语句详解
  6. 海豚调度DolphinScheduler源码分析(一)
  7. Photoshop操作总结(四)
  8. 毕业设计-微信公众平台开发与设计(一:准备材料)
  9. 类似滑动苹果解锁Text
  10. Pear Admin Layui - 基于 Layui 打造的免费开源、快速、高效的中后台管理系统前端框架