🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 思源笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

浏览器 - 拷贝到剪切板 (advanced)

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.

返回总目录

每天 30 秒系列之 JavaScript 代码


欢迎注册黑客派社区,开启你的博客之旅。让学习和分享成为一种习惯!

1 评论
AdlerED • 2019-10-24
回复 删除

这个就是Html5剪贴板复制的原理嘛😄