2019-10-24
描述
拷贝一个字符串到剪切板中。仅对用户操作的结果生效(如:内部 click
监听事件)。
提示
- 创建一个新的
<textarea>
元素,设置其value
为提供的数据,并将他添加到 HTML 文档中 - 如果页面中有元素被选中的话,使用
Selection.getRangeAt()
来存储选中的值 - 使用
document.execCommand('copy')
将内容拷贝到剪切板 - 从 HTML 文档中移除
<textarea>
元素 - 最终,使用
Selection().addRange()
来恢复页面中原有选中的元素 - ⚠️ 注意: 使用新的异步的 Clipboard API 可以简单的实现相同的功能,但他依旧在实验阶段,在不久的将来才有可能使用他来替代以下代码片段。相关文档可以查看Clipboard.write()
代码
const copyToClipboard = str => {
const el = document.createElement('textarea');
el.value = str;
el.setAttribute('readonly', '');
el.style.position = 'absolute';
el.style.left = '-9999px';
document.body.appendChild(el);
const selected =
document.getSelection().rangeCount > 0 ? document.getSelection().getRangeAt(0) : false;
el.select();
document.execCommand('copy');
document.body.removeChild(el);
if (selected) {
document.getSelection().removeAllRanges();
document.getSelection().addRange(selected);
}
};
示例
将字符串拷贝到剪切板中:
copyToClipboard('Lorem ipsum'); // 'Lorem ipsum' copied to clipboard.