用execCommand复制javascript

时间:2017-06-20 08:43:12

标签: javascript ecmascript-6 clipboard execcommand

我想从html元素中复制数据集中的一些内容。

HTML代码

<p id="web-password-@{{ id }}" data-password="@{{ password }}" 
data-state="0">@{{ hidePassword }}</p>

<button class="mdl-button mdl-js-button mdl-button--icon">

    <i data-event="copy" data-obj="util" data-target="web-password-@{{ id }}" 
    class="material-icons clickable-icon">content_copy</i>

</button>

复制方法

通过data-event和data-obj属性调用该方法。

copy (args) {

    let copyText = document.getElementById(args.target).dataset.password;

    console.log(copyTest); // output: specific password

    document.execCommand("Copy");
}

像这样,它不会将内容复制到剪贴板。有人看到错误吗?

更新

以下代码适用于htmlelement的实际textContent。

但我需要复制数据密码属性

中的值
let range = document.createRange();

let selection = window.getSelection();

let node = document.getElementById(args.target);

range.selectNodeContents(node);

selection.removeAllRanges();

selection.addRange(range);

document.execCommand("copy");

可能的解决方案

所以我在隐藏的输入字段中写入值,选择它,复制它并再次删除临时隐藏的输入字段。

但它什么都没复制。?

let copyValue = document.getElementById(args.target).dataset.password;

document.body.insertAdjacentHTML('beforeend', `<input hidden id="temp-copy" value="${copyValue}">`);

let copyText = document.getElementById('temp-copy');

copyText.select();

document.execCommand("copy");

copyText.remove();

3 个答案:

答案 0 :(得分:2)

<强>解决方案

<强>更新

更好的解决方案。

copyPassword (args) {

    function handler(event) {

        event.clipboardData.setData('text/plain', document.getElementById(args.target).dataset.password);

        event.preventDefault();

        document.removeEventListener('copy', handler, true);
    }

    document.addEventListener('copy', handler, true);

    document.execCommand('copy');
}

替代。 这也有效。

let range = document.createRange();

let selection = window.getSelection();

let password = document.getElementById(args.target).dataset.password;

document.body.insertAdjacentHTML('beforeend', `<p id="temp-copy">${password}</p>`);

let node = document.getElementById('temp-copy');

range.selectNodeContents(node);

selection.removeAllRanges();

selection.addRange(range);

document.execCommand("copy");

document.getElementById('temp-copy').remove();

答案 1 :(得分:0)

复制命令将当前选择复制到剪贴板。因此,您需要在复制前选择输入中的文本:

let input = document.getElementById(args.target);
input.select();
document.execCommand("Copy");

如果不支持或启用该命令,您可能还需要检查execCommand的{​​{1}}的返回值。

更新

如果您尝试复制的节点 falseinput,您可以选择以下文字:

textarea

source

答案 2 :(得分:0)

请参阅Dean Taylor的回答:https://stackoverflow.com/a/30810322/2879085

这是一个有效的例子:

&#13;
&#13;
ret=0
ret=22
ret=0
&#13;
update t1
set t1.value=t2.value
from tbl t1 
join
tbl t2 on 
t1.start=t2.start and t1.end=t2.end and t2.value not like 'pending'
and t1.value like 'pending'
&#13;
&#13;
&#13;