Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript复制到剪贴板不工作_Javascript_Html_Dom_Copy Paste - Fatal编程技术网

JavaScript复制到剪贴板不工作

JavaScript复制到剪贴板不工作,javascript,html,dom,copy-paste,Javascript,Html,Dom,Copy Paste,我的脚本中有一个函数给了我一个错误。该函数的目的是通过onClick事件从静态面板(而不是文本框或输入)复制文本 未捕获类型错误:copyText.select不是一个函数 我想要的是让用户能够点击文本,并将其复制到他的剪贴板 也许你能提供更好的功能 从w3schoolsselect()方法用于选择文本字段的内容。它在h1元素上不起作用。这将允许您复制元素的文本。虽然我没有测试过复杂的布局 如果要使用此选项,请删除警报,并提供更好的方式让用户知道内容已被复制 SAFARI:这在10.0版之前的

我的脚本中有一个函数给了我一个错误。该函数的目的是通过onClick事件从静态面板(而不是文本框或输入)复制文本

未捕获类型错误:copyText.select不是一个函数

我想要的是让用户能够点击文本,并将其复制到他的剪贴板

也许你能提供更好的功能


从w3schools

select()
方法用于选择文本字段的内容。它在
h1
元素上不起作用。

这将允许您复制元素的文本。虽然我没有测试过复杂的布局

如果要使用此选项,请删除警报,并提供更好的方式让用户知道内容已被复制

SAFARI:这在10.0版之前的SAFARI上不起作用。但从现在起,这一切都起作用了

函数copyText(元素){
var范围、选择、工作;
if(document.body.createTextRange){
range=document.body.createTextRange();
range.moveToElementText(元素);
range.select();
}else if(window.getSelection){
selection=window.getSelection();
range=document.createRange();
范围。选择节点内容(元素);
selection.removeAllRanges();
选择。添加范围(范围);
}
试一试{
document.execCommand('copy');
警报(“文本复制”);
}
捕捉(错误){
警报(“无法复制文本”);
}
}

文本示例
您好,我查看了一下,因为您没有使用文本输入,所以不能只使用
.select()
函数。我从一位堆栈溢出开发人员Jason那里借了一些关于如何在javaScript中突出显示项的代码

函数选择文本(元素)({

然后我修改它以返回范围。 有了这些,你所要做的就是

document.onclick = function(e){
  if(e.target.className === 'click'){

      var copytext = SelectText('display');
      document.execCommand("copy");
      alert("Copied the text: " + copytext);
   }
}

这里的关键部分是传递给
.execCommand()的字符串是小写的“copy”

Intervalia给出的很好的答案

对它的小小改进,有时单击的元素不是您要复制的元素。
因此,我建议您传递要复制的元素的id

<button onClick='copyText("display")'> Copy </button>
<h1 id='display'> Text Sample </h1>
差别不大,但我认为这样更有用。

最近的一个解决方案(2020年)使用了大多数现代浏览器支持的新浏览器(有关更多详细信息,请参阅)

//如果要从元素复制文本
函数copyTextFromElement(elementID){
let element=document.getElementById(elementID);//选择元素
让elementText=element.textContent;//从元素中获取文本内容
copyText(elementText);//使用下面的copyText函数
}
//如果您只想在剪贴板中放入一些文本,请使用此功能
//并将字符串作为参数传递给COPYED。
函数copyText(文本){
navigator.clipboard.writeText(文本);
}
这是一些需要复制的文本

复制
没有
.value()
功能(也没有
.select()
功能)。也许您正在考虑输入?例如,将
h1
更改为
textarea
。这样就可以了。无需将
header1
标记替换为
textarea
。您可以使用隐藏输入来保存调用函数的元素的
textContent
。选择()
document.execCommand('copy'))
为多次使用而更新我认为如果您在该命令上尝试
捕获
并不重要。即使您没有正确选择文本,它也不会复制任何内容或您实际选择的任何内容。但如果在尝试复制电子邮件内容时,这将不起作用。
尝试
/
捕获
对于较旧的浏览器是必需的。其中一些浏览器会抛出异常而不是正常的失败。
document.onclick = function(e){
  if(e.target.className === 'click'){

      var copytext = SelectText('display');
      document.execCommand("copy");
      alert("Copied the text: " + copytext);
   }
}
<button onClick='copyText("display")'> Copy </button>
<h1 id='display'> Text Sample </h1>
element = document.getElementById(element);