js实现点击按钮复制文本功能


Posted in Javascript onJuly 20, 2020

最近遇到一个需求,需要点击按钮,复制 <p> 标签中的文本到剪切板

之前做过复制输入框的内容,原以为差不多,结果发现根本行不通

尝试了各种办法,最后使了个障眼法,实现了下面的效果

js实现点击按钮复制文本功能

一、原理分析

浏览器提供了 copy 命令 ,可以复制选中的内容

document.execCommand("copy")

如果是输入框,可以通过 select() 方法,选中输入框的文本,然后调用  copy 命令,将文本复制到剪切板

但是 select() 方法只对 <input> 和 <textarea> 有效,对于 <p> 就不好使

最后我的解决方案是,在页面中添加一个 <textarea>,然后把它隐藏掉

点击按钮的时候,先把 <textarea> 的 value 改为 <p> 的 innerText,然后复制 <textarea> 中的内容 

二、代码实现

HTML 部分

<style type="text/css">
 .wrapper {position: relative;}
 #input {position: absolute;top: 0;left: 0;opacity: 0;z-index: -10;}
</style>

<div class="wrapper">
 <p id="text">我把你当兄弟你却想着复制我?</p>
 <textarea id="input">这是幕后黑手</textarea>
 <button onclick="copyText()">copy</button>
</div>

JS 部分

<script type="text/javascript">
 function copyText() {
  var text = document.getElementById("text").innerText;
  var input = document.getElementById("input");
  input.value = text; // 修改文本框的内容
  input.select(); // 选中文本
  document.execCommand("copy"); // 执行浏览器复制命令
  alert("复制成功");
 }
 </script>

亲测,Firefox 48.0,Chrome 60.0,IE 8 都能用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中xml操作实现代码
Nov 21 Javascript
jquery设置元素的readonly和disabled的写法
Sep 22 Javascript
JavaScript实现显示函数调用堆栈的方法
Apr 21 Javascript
AngularGauge 属性解析详解
Sep 06 Javascript
Angularjs 创建可复用组件实例代码
Oct 09 Javascript
Vue系列:通过vue-router如何传递参数示例
Jan 16 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
Vue封装Swiper实现图片轮播效果
Feb 06 Javascript
webpack4.x开发环境配置详解
Aug 04 Javascript
浅谈微信小程序flex布局基础
Sep 10 Javascript
详解Vue iview IE浏览器不兼容报错(Iview Bable polyfill)
Jan 07 Javascript
JavaScript实现10秒后再次获取验证码
Dec 02 Javascript
Element-UI Table组件上添加列拖拽效果实现方法
Apr 14 #Javascript
React中的render何时执行过程
Apr 13 #Javascript
全站最详细的Vuex教程
Apr 13 #Javascript
vue的常用组件操作方法应用分析
Apr 13 #Javascript
简单的vuex 的使用案例笔记
Apr 13 #Javascript
angular实现页面打印局部功能的思考与方法
Apr 13 #Javascript
vuex中的 mapState,mapGetters,mapActions,mapMutations 的使用
Apr 13 #Javascript
You might like
PHP在字符串中查找指定字符串并删除的代码
2008/10/02 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
php使用GD库创建图片缩略图的方法
2015/06/10 PHP
Zend Framework教程之前端控制器Zend_Controller_Front用法详解
2016/03/07 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
浅谈PHP中的那些魔术常量
2020/12/02 PHP
基于jquery的一行代码轻松实现拖动效果
2010/12/28 Javascript
js数组的操作详解
2013/03/27 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
JS计算网页停留时间代码
2014/04/28 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
Node.js编写爬虫的基本思路及抓取百度图片的实例分享
2016/03/12 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
Node.js实现兼容IE789的文件上传进度条
2016/09/02 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
Vue计算属性的学习笔记
2017/03/22 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
Vue+Vant 图片上传加显示的案例
2020/11/03 Javascript
[44:01]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS paiN
2018/03/31 DOTA
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
使用django-suit为django 1.7 admin后台添加模板
2014/11/18 Python
python中自带的三个装饰器的实现
2019/11/08 Python
Python 存取npy格式数据实例
2020/07/01 Python
python math模块的基本使用教程
2021/01/16 Python
Python扫描端口的实现
2021/01/25 Python
实例讲解使用CSS实现多边框和透明边框的方法
2015/09/08 HTML / CSS
Interrail法国:乘火车探索欧洲,最受欢迎的欧洲铁路通票
2019/08/27 全球购物
电子信息专业自荐书
2014/02/04 职场文书
2014年教师党员公开承诺书
2014/05/28 职场文书
2014年防汛工作总结
2014/12/08 职场文书
《为人民服务》教学反思
2016/02/20 职场文书
利用 SQL Server 过滤索引提高查询语句的性能分析
2021/07/15 SQL Server
Redis基本数据类型Set常用操作命令
2022/06/01 Redis