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 相关文章推荐
JS中confirm,alert,prompt函数使用区别分析
Apr 01 Javascript
js截取函数(indexOf,join等)
Sep 01 Javascript
jQuery中mouseover事件用法实例
Dec 26 Javascript
ECMAScript中函数function类型
Jun 03 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
javascript基本语法
May 31 Javascript
HTML中使背景图片自适应浏览器大小实例详解
Apr 06 Javascript
vue中实现左右联动的效果
Jun 22 Javascript
使用vuex解决刷新页面state数据消失的问题记录
May 08 Javascript
Layui点击图片弹框预览的实现方法
Sep 16 Javascript
JavaScript检测浏览器是否支持CSS变量代码实例
Apr 03 Javascript
Antd中单个DatePicker限定时间输入范围操作
Oct 29 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
慎用preg_replace危险的/e修饰符(一句话后门常用)
2013/06/19 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
js 数值转换为3位逗号分隔的示例代码
2014/02/19 Javascript
JavaScript中日期的相关操作方法总结
2015/10/24 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
原生JS实现网络彩票投注效果
2016/09/25 Javascript
深入理解JS继承和原型链的问题
2016/12/17 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
JavaScript编写九九乘法表(两种任选)
2017/02/04 Javascript
js学习总结之DOM2兼容处理顺序问题的解决方法
2017/07/27 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
Vue 实现监听窗口关闭事件,并在窗口关闭前发送请求
2020/09/01 Javascript
[23:21]Ti4 冒泡赛第二轮DK vs C9 2
2014/07/14 DOTA
python实现自动发送邮件发送多人、群发、多附件的示例
2018/01/23 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
Python 创建新文件时避免覆盖已有的同名文件的解决方法
2018/11/16 Python
Python Selenium 之数据驱动测试的实现
2019/08/01 Python
numpy按列连接两个维数不同的数组方式
2019/12/06 Python
Pytorch: 自定义网络层实例
2020/01/07 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
Python新手学习raise用法
2020/06/03 Python
Python爬虫防封ip的一些技巧
2020/08/06 Python
10 套华丽的CSS3 按钮小结
2012/10/03 HTML / CSS
CSS3中的content属性使用示例
2015/07/20 HTML / CSS
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
加拿大领先的牛仔零售商:Bluenotes
2018/01/22 全球购物
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
行政内勤岗位职责
2014/04/07 职场文书
计划生育证明格式范本
2014/09/12 职场文书