JS 实现一键复制功能

复制是一个使用频率特别高的操作,在网页中,一般可以选中要复制的内容,使用快捷键ctrl+c 将内容复制到剪贴板。除了使用系统提供的快捷方式复制网页内容,我们还可以用JS实现复制,这得益于document的execCommand('copy') 命令。

实现整个复制功能,需要以下三个步骤:

  1. 选中需要复制的内容:选中的操作可以通过表单元素的select() 方法实现。

  2. 复制选中的内容:使用document.execCommand('copy') 方法实现复制。

  3. 返回需要复制的内容:这个比较简单,返回HTML元素的innerText属性值就可以。

表单元素select方法选中内容

我们可以通过表单元素的select()方法选中内容,表单元素因为textarea限制少于input,所以推荐使用textarea。我们可以动态创建一个textarea元素,将textarea的value属性值设置为上面的innerText属性值,再执行textarea的select方法选中。

  var textValue = document.createElement('textarea');
  textValue.setAttribute('readonly', 'readonly'); //设置只读属性防止手机上弹出软键盘
  textValue.value = selectText(element); //上面selectText函数返回值赋给textarea的value
  document.body.appendChild(textValue); //将textarea添加为body子元素
  textValue.select();

上面实现了选中,下面就可以实现复制功能了。

execCommand('copy')实现复制

最后一步就可以用execCommand('copy')实现复制了,它可以复制浏览器中选中的文本,比如说上面被textarea选中的文本,复制之后记得移除textarea。

  var res = document.execCommand('copy');
  document.body.removeChild(textValue);//移除DOM元素
  console.log("复制成功");
  console.log(res);//res为复制结果,是一个布尔值

第二步和第三步可以优化一下,创建一个copy函数,函数参数设置为第一步需要复制的文本,返回值为复制的结果。

完整JS示例如下:

/**
 * 返回当前元素的文本内容
 * @parm {DOM} element 当前DOM元素
 */
function selectText(element){
    return element.innerText;
}
/**
 * @param {String} text 需要复制的内容
 * @return {Boolean} 复制成功:true或者复制失败:false  执行完函数后,按ctrl + v试试
*/
function copyText(text){
    var textValue = document.createElement('textarea');
    textValue.setAttribute('readonly', 'readonly'); //设置只读属性防止手机上弹出软键盘
    textValue.value = text;
    document.body.appendChild(textValue); //将textarea添加为body子元素
    textValue.select();
    var res = document.execCommand('copy');
    document.body.removeChild(textValue);//移除DOM元素
    console.log("复制成功");
    return res;
}

使用示例
可以将上面的完整JS示例写入一个JS文件,将JS文件引入HTML中,通过JS点击事件来执行复制函数。




 
 
 
 JS复制内容-demo
 


 

点我选择复制我的内容1111

点我选择复制我的内容2222

JS实现一键复制功能

本节文章摘录于(作者:微语博客),详细教程请点击查看 https://www.jianshu.com/p/de197e90b7be

你可能感兴趣的:(JS 实现一键复制功能)