从<span>复制文本到剪贴板

28

我一直在尝试复制一个 <span> 元素的 innerContent 至剪贴板,但一直未能成功:

HTML

<span id="pwd_spn" class="password-span"></span>

JavaScript

函数调用

    document.addEventListener('DOMContentLoaded', function () {
    document.getElementById('copy').addEventListener('click', copy_password);
});

功能

function copy_password() {
    var copyText = document.getElementById("pwd_spn").select();
    document.execCommand("Copy");
}

我也尝试了:

function copy_password() {
    var copyText = document.getElementById("pwd_spn").textContent;
    copyText.select();
    document.execCommand("Copy");
}

看起来.select()<span>元素上不起作用,因为我在两个元素上都得到了以下错误:

输入图像描述


https://dev59.com/-loV5IYBdhLWcg3wIb74 - epascarello
可能是如何在JavaScript中复制到剪贴板?的重复问题。 - freginold
3个回答

65
你可以这样做:创建一个临时文本区域并将其附加到页面,然后将元素的内容添加到文本区域中,从文本区域复制值,最后删除文本区域。
由于某些安全限制,只有在用户与页面交互后才能执行“复制”命令,因此您需要添加一个按钮,并在用户单击该按钮后复制文本。

document.getElementById("cp_btn").addEventListener("click", copy_password);

function copy_password() {
    var copyText = document.getElementById("pwd_spn");
    var textArea = document.createElement("textarea");
    textArea.value = copyText.textContent;
    document.body.appendChild(textArea);
    textArea.select();
    document.execCommand("Copy");
    textArea.remove();
}
<span id="pwd_spn" class="password-span">Test</span>
<button id="cp_btn">Copy</button>


1
这将丢失HTML标记,但如果他们只需要文本,那也不是什么大问题。 - epascarello
1
@epascarello 你的意思是因为文本区域被附加了吗? - rafaelgomesxyz
谢谢您的想法。它已经成功运行了。 - iThanh
但是,@rafaelgomesxyz 先生/女士,您是如何想出这个想法的呢? - Rohan Devaki
我发现这个不起作用,直到我将 document.execCommand("Copy") 更改为 document.execCommand("copy") - Randy Gamage
2021年底时在 Firefox 中也可以使用。 - lnstadrum

5
请参见https://dev59.com/-loV5IYBdhLWcg3wIb74#48020189,其中有一个代码片段,为您提供了一个关于
的示例,也适用于,我没有在此处复制它以避免重复。
基本上,在复制到剪贴板时,您需要创建文本选择,

0

简单方法
1)创建一个输入框
2)给它样式z-index -1,它就会隐藏起来

    var code = $("#copy-to-clipboard-input");
    var btnCopy = $("#btn-copy");

    btnCopy.on("click", function () {
        code.select();
        document.execCommand("copy");
    });
                                                                                             
<input type="input" style="width:10px; position:absolute; z-index: -100 !important;" value="hello" id="copy-to-clipboard-input">
<button class="btn btn-success" id="btn-copy">Copy</button>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接