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检查日期格式的函数[比较全]
Oct 17 Javascript
jquery动态增加删除表格行的小例子
Nov 14 Javascript
深入理解javascript变量声明
Nov 20 Javascript
原创jQuery弹出层插件分享
Apr 02 Javascript
jquery显示loading图片直到网页加载完成的方法
Jun 25 Javascript
Javascript刷新窗口方法小结
Oct 21 Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 Javascript
基于Two.js实现星球环绕动画效果的示例
Nov 06 Javascript
简述ES6新增关键字let与var的区别
Aug 23 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
Sep 10 Javascript
uni-app使用countdown插件实现倒计时
Nov 01 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的FTP学习(一)
2006/10/09 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
2012/01/11 PHP
Function eregi is deprecated (解决方法)
2013/06/21 PHP
PHP中比较时间大小实例
2014/08/21 PHP
php文件上传简单实现方法
2015/01/24 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
PHP记录和读取JSON格式日志文件
2016/07/07 PHP
常用的几段javascript代码分享
2014/03/25 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
JavaScript立即执行函数的三种不同写法
2014/09/05 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
基于javascript实现彩票随机数生成(升级版)
2020/04/17 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
JS中递归函数
2016/06/17 Javascript
jQuery插件学习教程之SlidesJs轮播+Validation验证
2016/07/12 Javascript
如何用JS判断两个数字的大小
2016/07/21 Javascript
AngularJS控制器详解及示例代码
2016/08/16 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
微信小程序“摇一摇”的实例代码
2017/07/20 Javascript
Angularjs实现控制器之间通信方式实例总结
2018/03/27 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
Node.js + express实现上传大文件的方法分析【图片、文本文件】
2019/03/14 Javascript
在JavaScript中如何访问暂未存在的嵌套对象
2019/06/18 Javascript
NodeJS 文件夹拷贝以及删除功能
2019/09/03 NodeJs
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
[01:32:22]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第一场 2月5日
2021/03/11 DOTA
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
台湾旅游网站:雄狮旅游网
2017/08/16 全球购物
Java中的类包括什么内容?设计时要注意哪些方面
2012/05/23 面试题
金融专业大学生自我评价
2014/01/09 职场文书
会计工作检讨书
2015/02/19 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
python批量创建变量并赋值操作
2021/06/03 Python