如何通过JS实现将指定内容复制到剪贴板
如何通过JS将指定内容复制到剪贴板?
就目前来讲最简单有效的方式还是使用js的execCommand()。为保证复制功能的正常运行,需要解决以下几个问题:
一、execCommand()在复制内容时,只能从可输入控件中复制内容
因此当你需要复制非可输入元素(如div)中的内容时,需要先完成将内容转化为可输入控件中的内容这一步骤。在这里我们通过在文档中添加子节点input的方式执行
二、在手机或其它可移动设备上,当我们点击复制时,添加的子节点实际处于激活状态,会自动弹出输入键盘
因此我们需要给节点添加readonly属性。
需要注意的是:子节点只有处于"可视化"的状态下,才能够完成正确的复制操作。即不能有以下任一情况出现:
1、input中存在disabled属性
2、width||height的值为0;
3、有hidden、display:none等属性存在
可以使用readonly或opacity:0;
完整代码如下:
$(function() { $(".copy").click(function() { //要复制的内容,防止内容被转义,使用.text()而不是.html() var content = $(this).siblings("code").text(); //创建可输入控件,因为execCommand方法只能从input,textarea等可输入控件中复制内容 const input = document.createElement('input'); //将属性设为只读,防止手机中呼出键盘 input.setAttribute('readonly', 'readonly'); //将要复制的内容写入控件的value中 input.value = content; //input.setAttribute('value', content); document.body.appendChild(input); input.setSelectionRange(0, 9999); //控制输入光标位置 input.select(); //选择内容 document.execCommand('copy'); //执行复制 document.body.removeChild(input); if (content != '') { //改变按钮颜色并添加复制成功提示 $(this).addClass("copied").text("复制成功"); // 解决setTineout中不支持$(this)的问题 var ts = $(this); //延时3秒后还原按钮颜色 setTimeout(function() { ts.removeClass("copied").text("复制"); }, 3000); } }); });
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。