React一键复制
如题,我们怎么在React或者其他的框架中实现一键复制呢,实际上实现一键复制的代码与框架无关,因为他是用的是原生的API,下面我们用React来实现一下
效果:
  
核心代码:
直接将红框处改为需要复制的元素类名。(获取元素时注意一下我用的是querySelector)
将该事件绑定到元素上,即可。完整代码在最下方
  
完整代码:
注意:Icon和message均是来自于antd组件库,如若没装antd,改成别的元素即可
import React from 'react';
import './App.css';
import {Icon, message} from 'antd';
class App extends React.Component{
//一键复制功能
copy() {
const copyEle = document.querySelector('.contentText') // 获取要复制的节点
const range = document.createRange(); // 创造range
window.getSelection().removeAllRanges(); //清除页面中已有的selection
range.selectNode(copyEle); // 选中需要复制的节点
window.getSelection().addRange(range); // 执行选中元素
const copyStatus = document.execCommand("Copy"); // 执行copy操作
// 对成功与否定进行提示
if (copyStatus) {
message.success('复制成功');
} else {
message.fail('复制失败');
}
window.getSelection().removeAllRanges(); //清除页面中已有的selection
}
render() {
return (
<div className="App">
<div className="content">
<p className="contentTitle">
<Icon
type="copy"
onClick={this.copy}/>
</p>
<p className="contentText">
我是要被复制的内容啊!!!
</p>
</div>
</div>
);
}
} export default App;
原理:
我们来看一下具体的步骤:(具体API使用可以查阅MDN)
1. document.querySelector('.contentText') 获取需要复制的节点
2. document.createRange(); 创造一个区域
3. window.getSelection().removeAllRanges(); 将所有选区都清除(即被按住鼠标划中选择的部分)
4. range.selectNode(copyEle); 选中区域要包含的对象
5. document.execCommand("Copy"); execCommand方法允许运行命令来操纵可编辑内容区域的元素。
6.判断成功与否
7.window.getSelection().removeAllRanges(); 将所有选区都清除(即被按住鼠标划中选择的部分)
通过以上的步骤,一键复制就做好啦!!
React一键复制的更多相关文章
- Chrome扩展程序——TabCopy:一键复制网页标题和网址
		
Chrome扩展程序——TabCopy:一键复制网页标题和网址 - Erik_ly的博客 - CSDN博客 https://blog.csdn.net/u012318074/article/detai ...
 - 兼容安卓和ios实现一键复制内容到剪切板
		
实现代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <m ...
 - 微信小程序——长按复制、一键复制
		
wxml: 订单号:<text selectable='true' bindlongtap='copy' >{{OrderModel.OrderNo}}</text><b ...
 - 一款给力的一键复制js插件-clipboard.js
		
一款没有依赖的.给力的一键复制的JS插件 点我前往github 案例demo见下载包内demo文件夹. 这里晒出最常用的几种方式,以供不时之需. <!DOCTYPE html> < ...
 - PathCopyCopy一键复制文件路径
		
1.简介 PathCopyCopy一键复制文件/文件夹名称和路径, 右键文件或者文件夹,可以复制名称,路径和父目录等. 2.推荐理由 当我们想拷贝文件名或者文件路径时,简直是神器啊,实测真的好用. 还 ...
 - H5移动端实现一键复制或长摁复制
		
今天接到了一个新的需求,要求我们对表单中的某一个字段进行复制,这个表单是不可选的,拿到需求的时候有点懵,不清楚下手点在哪,后来网上找了找,终于有了点眉目,感觉网上有些是实现不了的,特地在这里记录下进行 ...
 - clipboard.js一个可以在移动端一键复制的插件
		
网址:https://clipboardjs.com/ 使用方法: 1.引入js <script src="dist/clipboard.min.js"></sc ...
 - jquery 一键复制文本到剪切板
		
<a id="copy" data-clipboard-text="123456">复制文本</a> $(function(){ var ...
 - js 一键复制
		
function copyURL(id){ var siteId=$("#siteId").val() var oInput = document.createElement('i ...
 
随机推荐
- ACL2019: 《GraphRel: Modeling Text as Relational Graphs for Joint Entity and Relation Extraction》源码解析
			
论文地址:<GraphRel: Modeling Text as Relational Graphs for Joint Entity and Relation Extraction> G ...
 - TensorFlow在windows 下的安装
			
前言:从2015年谷歌将tensorflow开源后,这位用于深度学习的强大神器便把Caffe,Keras,Torch7等这一票人全部干掉,github上的star和fork是一路飙升,几乎是它们的总和 ...
 - Java多线程——对象及变量的并发访问
			
Java多线系列文章是Java多线程的详解介绍,对多线程还不熟悉的同学可以先去看一下我的这篇博客Java基础系列3:多线程超详细总结,这篇博客从宏观层面介绍了多线程的整体概况,接下来的几篇文章是对多线 ...
 - python中将xml格式转json格式
			
一.简介 在用python写脚本时,通常需要处理xml格式的文件或字符串.由于json格式处理的方便性, 我们可将其转为json格式进行处理. 二.步骤 1.安装工具包xmltodict 在命令行输入 ...
 - 2场 J -Subarray
			
题意: 长度为1e91e9的(1,−1)(1,−1)序列,下标从00到1e9−11e9−1,已知有nn个区间为11,其他为−1−1, 问存在多少个区间的和>1>1(保证∑1≤i≤nr[i] ...
 - 解决WebUploader 上传按钮按F12 才行的问题
			
遇到了 WebUploader 插件的上传按钮点击无效(此时鼠标在按钮任何位置时,按钮都没变化).按F12 之后才有反应(此时鼠标在按钮任何位置时,按钮颜色都会变深) 的问题,网上查到一些答案,找到了 ...
 - Java package 包的命名规范。
			
Java的包名都有小写单词组成,类名首字母大写:包的路径符合所开发的 系统模块的 定义,比如生产对生产,物资对物资,基础类对基础类.以便看了包名就明白是哪个模块,从而直接到对应包里找相应的实现. 由于 ...
 - Python与自然语言处理搭建环境
			
参考书籍<Python自然语言处理>,书籍中的版本是Python2和NLTK2,我使用的版本是Python3和NLTK3 实验环境Windows8.1,已有Python3.4,并安装了Nu ...
 - wpa_supplicant的移植
			
解压,进入,使用默认配置文件 cd wpa_supplicant-2.6 cp defconfig .config 修改.config文件,修改部分,根据自己的需要进行这部分的配置 #指定libnl的 ...
 - Reactive(3)5分钟理解 SpringBoot 响应式的核心-Reactor
			
目录 一.前言 二. Mono 与 Flux 构造器 三. 流计算 1. 缓冲 2. 过滤/提取 3. 转换 4. 合并 5. 合流 6. 累积 四.异常处理 五.线程调度 小结 参考阅读 一.前言 ...