需要近期研究的项目高级JSWeb前端应用实例

JS实现内容复制功能

2021-11-29  本文已影响0人  微语博客

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

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

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

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

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

innerText返回内容

大部分HTML元素都有innerText和innerHTML两个属性,innerText属性返回文本内容,innerHTML属性返回标签元素。我们可以创建一个函数,用于获取需要返回的内容:

/**
 * 返回当前元素的文本内容
 * @parm {DOM} element 当前DOM元素
 */
function selectText(element){
    return element.innerText;
}

上面的selectText函数接收一个DOM元素,返回DOM元素的innerText属性值。

表单元素select方法选中内容

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

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

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

execCommand('copy')实现复制

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

var res = document.execCommand('copy');
document.body.removeChild(textareaC);//移除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 textareaC = document.createElement('textarea');
    textareaC.setAttribute('readonly', 'readonly'); //设置只读属性防止手机上弹出软键盘
    textareaC.value = text;
    document.body.appendChild(textareaC); //将textarea添加为body子元素
    textareaC.select();
    var res = document.execCommand('copy');
    document.body.removeChild(textareaC);//移除DOM元素
    console.log("复制成功");
    return res;
}

如何使用

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

<!DOCTYPE html>
<html lang="zh">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>JS复制内容-demo</title>
 <style>
 h3{
   text-align: center;
 }
 </style>
</head>
<body>
 <h3 onclick="myFun(this)">点我选择复制我的内容1111</h3>
 <h3 onclick="myFun(this)">点我选择复制我的内容2222</h3>
 <script src="copy.js"></script><!--引入JS文件-->
 <script>
 function myFun(e) {
    copyText(selectText(e));
 }
 </script>
</body>
</html>

效果图:

JS实现内容复制
上一篇下一篇

猜你喜欢

热点阅读