JS复制对应id的内容到粘贴板(Ctrl+C效果)


Posted in Javascript onJanuary 23, 2017

前言

最近在做一个按钮,实现的效果是当点击后复制url到黏贴板,但不是当前页面url,而是对应一个元素的url,且一个页面会有多个url。一开始找到一个方法,但是竟然只兼容IE浏览器,神奇了,竟然有只兼容IE的东西。后来发现一个zeroclipboard.js这个插件,但是怎么也搞不出那个效果,有点麻烦。

最后翻到了一个js封装好的方法,有效!

想要实现的一个效果是,下面html代码:

<tr>
 <td>
 <a id="copy_{$key}" onclick="getUrl('{$key}')">复制文件链接</a>
 <input id="file_{$key}" value="{$file.file_url}" style="margin-left: -9999px"/>
 </td>
</tr>

点击复制文件链接这个按钮,复制input框里的value值,是传进去的一个url;首先点击a标签会触发getUrl这个函数;传进去id用于找到对应的input然后取值(因为遍历了多个td,有许多个input框一一对应去取)。

下面js代码:

<pre><script type="application/javascript">
 
 function getUrl(id) {
  if (copyToClipboard(document.getElementById("file_"+id))){
   alert("成功复制到黏贴板!");
  }else{
   alert("复制到黏贴板失败!");
  }
 }
 
 function copyToClipboard(elem) {
  // create hidden text element, if it doesn't already exist
  var targetId = "_hiddenCopyText_";
  var isInput = elem.tagName === "INPUT" || elem.tagName === "TEXTAREA";
  var origSelectionStart, origSelectionEnd;
  if (isInput) {
   // can just use the original source element for the selection and copy
   target = elem;
   origSelectionStart = elem.selectionStart;
   origSelectionEnd = elem.selectionEnd;
  } else {
   // must use a temporary form element for the selection and copy
   target = document.getElementById(targetId);
   if (!target) {
    var target = document.createElement("textarea");
    target.style.position = "absolute";
    target.style.left = "-9999px";
    target.style.top = "0";
    target.id = targetId;
    document.body.appendChild(target);
   }
   target.textContent = elem.textContent;
  }
  // select the content
  var currentFocus = document.activeElement;
  target.focus();
  target.setSelectionRange(0, target.value.length);
 
  // copy the selection
  var succeed;
  try {
   succeed = document.execCommand("copy");
  } catch(e) {
   succeed = false;
  }
  // restore original focus
  if (currentFocus && typeof currentFocus.focus === "function") {
   currentFocus.focus();
  }
 
  if (isInput) {
   // restore prior selection
   elem.setSelectionRange(origSelectionStart, origSelectionEnd);
  } else {
   // clear temporary content
   target.textContent = "";
  }
  return succeed;
 }
</script></pre>

getUrl中调用了封装好的copyToClipboard方法实现了功能。有一点的是html中input的样式用style="margin-left: -9999px"进行隐藏,因为不知道为什么用type="hiden"或者display="none"去隐藏都只会获取源代码而不是动态的url遍历出来的值。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
javascript 年月日联动实现核心代码
Dec 21 Javascript
js继承的实现代码
Aug 05 Javascript
jquery中object对象循环遍历的方法
Dec 18 Javascript
如何在Angular2中使用jQuery及其插件的方法
Feb 09 Javascript
AngularJS自定义过滤器用法经典实例总结
May 17 Javascript
JS实现点击按钮可实现编辑功能
Jul 03 Javascript
基于bootstrap页面渲染的问题解决方法
Aug 09 Javascript
使用weixin-java-miniapp配置进行单个小程序的配置详解
Mar 29 Javascript
jquery.tagsinput.js实现记录checkbox勾选的顺序
Sep 21 jQuery
基于javascript的无缝滚动动画实现2
Aug 07 Javascript
Nuxt.js nuxt-link与router-link的区别说明
Nov 06 Javascript
js实现限定区域范围拖拉拽效果
Nov 20 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
Jan 23 #Javascript
Node.js Express 框架 POST方法详解
Jan 23 #Javascript
js 颜色选择插件
Jan 23 #Javascript
JavaScript常用正则函数用法示例
Jan 23 #Javascript
详解微信小程序 wx.uploadFile 的编码坑
Jan 23 #Javascript
微信小程序侧边栏滑动特效(左右滑动)
Jan 23 #Javascript
微信小程序技巧之show内容展示,上传文件编码问题
Jan 23 #Javascript
You might like
php中base64_decode与base64_encode加密解密函数实例
2014/11/24 PHP
phplot生成图片类用法详解
2015/01/06 PHP
ecshop后台编辑器替换成ueditor编辑器
2015/03/03 PHP
php实现复制移动文件的方法
2015/07/29 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
在js中单选框和复选框获取值的方式
2009/11/06 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
浅谈javascript六种数据类型以及特殊注意点
2013/12/20 Javascript
JS中类或对象的定义说明
2014/03/10 Javascript
javascript 获取元素样式必杀技
2014/05/04 Javascript
javascript中attribute和property的区别详解
2014/06/05 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
2016/06/20 Javascript
JS获取鼠标选中的文字
2016/08/10 Javascript
详解使用vue-router进行页面切换时滚动条位置与滚动监听事件
2017/03/08 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
Vue.js render方法使用详解
2017/04/05 Javascript
简单实现jQuery轮播效果
2017/08/18 jQuery
javascript中数组的常用算法深入分析
2019/03/12 Javascript
[01:01:13]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第三场
2018/04/06 DOTA
[53:15]Mineski vs iG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python守护进程和脚本单例运行详解
2017/01/06 Python
Python Grid使用和布局详解
2018/06/30 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
通过实例简单了解python yield使用方法
2020/08/06 Python
sublime3之内网安装python插件Anaconda的流程
2020/11/10 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
娇韵诗法国官网:Clarins法国
2019/01/29 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
毕业生怎样写好自荐信
2013/11/11 职场文书
群众路线党员个人整改措施
2014/10/27 职场文书
工程合作意向书范本
2015/05/09 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
红与黑读书笔记
2015/06/29 职场文书
Redis遍历所有key的两个命令(KEYS 和 SCAN)
2021/04/12 Redis