Javascript 手动复制到剪贴板并点击

标签 javascript html

我目前有以下代码。单击时,数据项会根据需要复制到剪贴板,但问题是当我尝试通过选择并手动复制来复制多个项目时,它只会复制已选择的第一个项目,而不是全部。

const tds = document.querySelectorAll("td");

tds.forEach(td => {
  td.onclick = function() {
    document.execCommand("copy");
    // ------- code added from here -------
    this.className = 'copied';
    var td = this;
    setTimeout(function() {
       td.className = '';
    }, 1000)
    // -------      up to here      -------
  }

  td.addEventListener("copy", function(event) {
    event.preventDefault();
    if (event.clipboardData) {
      event.clipboardData.setData("text/plain", td.textContent);
      console.log(event.clipboardData.getData("text"))
    }
  });
})
td.copied:after {
content: "copied";
background-color: red;
padding: 5px;
display: block;
position: absolute;
}
<table><tbody><tr><td>Data 1</td><td>Data 2</td><td>Data 3</td></tr></tbody></table>

例如,如果您选择所有 3 个数据项并按 ctrl-c 或右键单击并复制,它只会复制所选的第一个项目。

虽然仍然保持点击复制,但可以在代码中更改某些内容以解决此问题,或者可以打开或关闭复选框/按钮以启用/禁用此功能以允许复制多个项目是最好的如何做到这一点?

首选不使用 jQuery 的解决方案。

最佳答案

在您的代码中这一行:

event.clipboardData.setData("text/plain", td.textContent);

更改 td.textContent,它只捕获那个点击的 TD,然后将此 TD 的文本复制到 window.getSelection()。此函数将捕获所有选定的数据,然后复制所有数据。

const tds = document.querySelectorAll("td");

tds.forEach(td => {
  td.onclick = function() {
    document.execCommand("copy");
    // ------- code added from here -------
    this.className = 'copied';
    var td = this;
    setTimeout(function() {
       td.className = '';
    }, 1000)
    // -------      up to here      -------
  }

  td.addEventListener("copy", function(event) {
    event.preventDefault();
    if (event.clipboardData) {
      event.clipboardData.setData("text/plain", window.getSelection());
      console.log(event.clipboardData.getData("text"))
    }
  });
})

但是现在,您必须首先选择要复制的数据。您可以在这里尝试:https://jsfiddle.net/0h25dc7z

当然方法有很多种,怎么实现你想要的,window.getSelection()只是其中一种。

关于Javascript 手动复制到剪贴板并点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50897573/

相关文章:

javascript - 使用 npm 在网页中包含脚本时的工作流程是什么?

c# - window.onbeforeunload 在文本框中丢失值

Javascript - 需要在 setInterval 函数之外使用clearInterval

javascript - 如何识别所选对象的类型?

javascript - 按正确顺序点击 div

html - HTML5 canvas 和标准 DIVS 有什么区别

javascript - 如何使用不同的颜色使用 CSS 填充 chrome 中输入[类型 ="range"] 的左侧?

javascript - 使用 CORS 通过 Canvas 的 HTML5 视频截图

javascript - HTML 输入文本字段值。读取运算符时出现问题 '>'

javascript - 如何在javascript计算器中显示消息而不是警报,如下: