document.execCommand(' copy')关于不在DOM中的对象?

时间:2015-01-22 08:51:36

标签: javascript jquery dom google-chrome-extension clipboard

我不是百分百肯定如何描述这个,所以我只需粘贴三段相关代码。

我能够做到这一点:

var dl = $('<a>',{
    style: 'display: none',
    download: this.name + '.txt',
    href: window.URL.createObjectURL(data, {type: "octet/stream"}))
});
dl[0].click();

我可以这样做:

copydeck = $("<textarea>").val(this.list.join("\r\n"));
$('body').append(copydeck);
copydeck.select();
document.execCommand('copy');
copydeck.remove();

但我不能这样做:

copydeck = $("<textarea>").val(this.list.join("\r\n"));
copydeck[0].select();
document.execCommand('copy');

为什么呢?我在这里错过了什么?我无法选择或复制不在DOM中的元素吗?有没有办法在不将物体附加到身体的情况下这样做?

1 个答案:

答案 0 :(得分:2)

  

为什么呢?我在这里缺少什么?

textarea中的document并非document.execCommand('copy'),因此呼叫textarea不会对其进行操作。请记住,可能存在多个文档(与各种窗口相关,例如iframe),并且除非文档中包含元素,否则它...不在文档中。

您可以附加textarea,发出命令,然后将其删除,而不会在显示中出现任何问题。也就是说,对于我在Linux上使用Chrome,您的代码最终不会将任何内容复制到剪贴板(无论我是从DOM中的click开始还是稍后动态添加它),即使我放了它在{{1}}处理程序中(例如,直接响应用户事件)。