用Javascript如何拷贝指定文字?

示例
页面上给用户提供一串字符(通常是URL或者分享代码),然后旁边有个拷贝按钮可以让用户直接点击复制是个很常见的简单的功能.但真的要去做的时候,发现一切并没有我理想当中的那么简单.
浏览器为了确保是用户自己做的操作,复制的内容必须是“选中”的,“可见”的。除此之外,还需要考虑头疼的浏览器兼容问题。

“选中”的复制内容

选中不光可以通过用户操作,也可以通过JS:

var range = window.getSelection().getRangeAt(0);
range.selectNode(document.getElementById("copy-field"));
window.getSelection().addRange(range);

Selection API浏览器支持:
Selection API浏览器支持

  • 用Input, Textarea的select()选中更方便
var input = document.querySelector('.copy-field');
input.select();

复制

try {
    var successful = document.execCommand('copy');
    var msg = successful ? 'successful' : 'unsuccessful';
    console.log('Copying text command was ' + msg);
} catch (err) {
    console.log('Oops, unable to copy');
}

document.execCommand可以用于复制、剪切等操作,返回一个boolean表示复制是否成功。
浏览器支持:
!execCommand的浏览器支持](https://img-blog.csdn.net/20180114195719551?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvamVubmllamk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)

必须“可见”

说可见可能并不那确切,因为我们可以通过适当的CSS来把选中内容遮盖起来,但对浏览器来说依旧是可见的状态。
经测试,设置以下CSS(包括父级元素)都会让复制失败:

.copy-field {
    display: none;
}
.copy-field {
    visibility: hidden;
}
.copy-field {
    width: 0;
}
.copy-field {
    height: 0;
}

这种情况下,可以考虑利用一个父级元素来帮忙将它推出用户可见范围外:

.parent-element {
    position: relative;
    overflow: hidden;
}
.copy-field {
    position: absolute;
    left: 100%;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值