单击时复制文本字符串

IT技术 javascript clipboard copy-paste
2021-01-19 17:03:48

我花了 20 分钟在网上搜索这个,但找不到。我想要的是能够在没有按钮的情况下在单击时复制文本字符串文本字符串将在“span”类中。

  1. 用户将鼠标悬停在文本字符串上
  2. 用户点击文本字符串
  3. 文本字符串被复制到剪贴板

任何帮助将不胜感激。谢谢!

6个回答

您可以将copy事件附加<span>元素,document.execCommand("copy")在事件处理程序中使用,设置event.clipboardDataspan .textContentwith.setData()方法event.clipboardData

const span = document.querySelector("span");

span.onclick = function() {
  document.execCommand("copy");
}

span.addEventListener("copy", function(event) {
  event.preventDefault();
  if (event.clipboardData) {
    event.clipboardData.setData("text/plain", span.textContent);
    console.log(event.clipboardData.getData("text"))
  }
});
<span>text</span>

我如何在clipboardData没有copy事件情况下获得控制就像来自另一个事件处理程序一样,就像一个单独元素上的点击事件一样?copy事件不点火。
2021-03-22 17:03:48
如果用户已经选择了一些文本,则此代码很容易出现问题。 有关完整解决方案,请参阅stackoverflow.com/a/53977796/6665568
2021-03-23 17:03:48
如何通过单击同级 div 按钮来实现此目的?
2021-04-01 17:03:48
@Flo 您可以使用相同的模式。copy事件附加到元素,在事件处理程序中设置剪贴板数据。
2021-04-04 17:03:48

试试这个 。document.execCommand('copy')

  1. 单击元素并复制文本并使用 tmp 输入元素发布
  2. 然后从此输入复制文本

function copy(that){
var inp =document.createElement('input');
document.body.appendChild(inp)
inp.value =that.textContent
inp.select();
document.execCommand('copy',false);
inp.remove();
}
<p onclick="copy(this)">hello man</p>

这个成功了,非常感谢你的帮助!!
2021-03-28 17:03:48
这种方法效果很好,但是如何复制包括新行在内的文本呢?(js 中的\n,html 中的 )我将onclick 设置为<code> 标记,因此用户只需单击并复制代码,但仍不会复制新行。如果需要,我可以提供更多解释和代码。
2021-04-01 17:03:48

这是代码笔

<link href='https://fonts.googleapis.com/css?family=Oswald' rel='stylesheet' type='text/css'> 
<p style="color:wheat;font-size:55px;text-align:center;">How to copy a TEXT to Clipboard on a Button-Click</p>

<center>
<p id="p1">This is  TEXT 1</p>
<p id="p2">This is TEXT 2</p><br/>

<button onclick="copyToClipboard('#p1')">Copy TEXT 1</button>
<button onclick="copyToClipboard('#p2')">Copy TEXT 2</button>

<br/><br/><input class="textBox" type="text" id="" placeholder="Dont belive me?..TEST it here..;)" />
</center>

Jquery代码在这里

function copyToClipboard(element) {
  var $temp = $("<input>");
  $("body").append($temp);
  $temp.val($(element).text()).select();
  document.execCommand("copy");
  $temp.remove();
}
人们会遇到关于搜索如何复制文本的问题,jQuery 可能是他们的一个选择,即使 op 可能不会直接从我的回答中受益,但很多社区成员会
2021-04-07 17:03:48

除了复制文本外,您还必须确保在复制到剪贴板后任何先前选择的组件仍保持选中状态。

这是完整的代码:

const copyToClipboard = str => {
  const el = document.createElement('textarea');  // Create a <textarea> element
  el.value = str;                                 // Set its value to the string that you want copied
  el.setAttribute('readonly', '');                // Make it readonly to be tamper-proof
  el.style.position = 'absolute';                 
  el.style.left = '-9999px';                      // Move outside the screen to make it invisible
  document.body.appendChild(el);                  // Append the <textarea> element to the HTML document
  const selected =            
    document.getSelection().rangeCount > 0        // Check if there is any content selected previously
      ? document.getSelection().getRangeAt(0)     // Store selection if found
      : false;                                    // Mark as false to know no selection existed before
  el.select();                                    // Select the <textarea> content
  document.execCommand('copy');                   // Copy - only works as a result of a user action (e.g. click events)
  document.body.removeChild(el);                  // Remove the <textarea> element
  if (selected) {                                 // If a selection existed before copying
    document.getSelection().removeAllRanges();    // Unselect everything on the HTML document
    document.getSelection().addRange(selected);   // Restore the original selection
  }
};

ps 添加

这应该是正确答案。接受的答案是错误的。
2021-03-31 17:03:48
我已经阅读了您的答案和原文,但不知何故,一旦复制了相关元素,似乎无法让浏览器(firefox)重新选择先前选择的文本。不确定如何调试;没有控制台问题。
2021-03-31 17:03:48

使用剪贴板 API!

最简单的现代解决方案是:

navigator.clipboard.writeText(value)

稍后可以通过以下方式访问该值:

navigator.clipboard.readText()

注意:要在 中使用iframe,您需要添加写(也可能是读)权限

<iframe src='' allow='clipboard-read; clipboard-write'/>

注意:要在浏览器扩展程序中使用(在网页上),您需要:

  • 来自用户触发事件的调用 ( click...)
  • 将“ clipboardWrite”权限添加到清单

注意:要在开发控制台中使用,请copy()改用

copy('string')

W3Schools 教程

我可以用吗

最后!我正要说“没有人考虑过使用navigator.clipboard???”
2021-03-16 17:03:48
我实际上很惊讶这不是最佳答案。剪贴板 API 是 OP
2021-03-22 17:03:48