JS实现内容复制功能
复制是一个使用频率特别高的操作,在网页中,一般可以选中要复制的内容,使用快捷键ctrl+c
将内容复制到剪贴板。除了使用系统提供的快捷方式复制网页内容,我们还可以用JS实现复制,这得益于document的execCommand('copy')
命令。
实现整个复制功能,需要以下三个步骤:
-
返回需要复制的内容:这个比较简单,返回HTML元素的
innerText
属性值就可以。 -
选中需要复制的内容:选中的操作可以通过表单元素的
select()
方法实现。 -
复制选中的内容:使用
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实现内容复制