原生js实现点击按钮复制文本
最近遇到一个需求,需要点击按钮,复制 标签中的文本到剪切板
从网站建设到定制行业解决方案,为提供成都网站设计、成都网站建设服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联公司将不断加快创新步伐,提供优质的建站服务。
之前做过复制输入框的内容,原以为差不多,结果发现根本行不通
尝试了各种办法,最后使了个障眼法,实现了下面的效果
一、原理分析
浏览器提供了 copy 命令 ,可以复制选中的内容
document.execCommand("copy")
如果是输入框,可以通过 select() 方法,选中输入框的文本,然后调用 copy 命令,将文本复制到剪切板
但是 select() 方法只对 和
复制代码
JS 部分
复制代码
复制代码
亲测,Firefox 48.0,Chrome 60.0,IE 8 都能用
三、一键复制
分享一个自己工作中用到的一键复制方法
复制代码
/**
- 一键粘贴
- @param {String} id [需要粘贴的内容]
- @param {String} attr [需要 copy 的属性,默认是 innerText,主要用途例如赋值 a 标签上的 href 链接]
- range + selection
- 1.创建一个 range
- 2.把内容放入 range
- 3.把 range 放入 selection
- 注意:参数 attr 不能是自定义属性
- 注意:对于 user-select: none 的元素无效
注意:当 id 为 false 且 attr 不会空,会直接复制 attr 的内容
*/
copy (id, attr) {
let target = null;if (attr) {
target = document.createElement('div');
target.id = 'tempTarget';
target.style.opacity = '0';
if (id) {
let curNode = document.querySelector('#' + id);
target.innerText = curNode[attr];
} else {
target.innerText = attr;
}
document.body.appendChild(target);
} else {
target = document.querySelector('#' + id);
}try {
let range = document.createRange();
range.selectNode(target);
window.getSelection().removeAllRanges();
window.getSelection().addRange(range);
document.execCommand('copy');
window.getSelection().removeAllRanges();
console.log('复制成功')
} catch (e) {
console.log('复制失败')
}if (attr) {
// remove temp target
target.parentElement.removeChild(target);
}
}
分享名称:原生js实现点击按钮复制文本
URL分享:http://myzitong.com/article/jccjpi.html