JS实现内容复制功能

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS实现内容复制功能相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

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

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

完整JS示例如下:

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

效果图:

《JS实现复制内容到剪贴板功能,可兼容所有PC浏览器,不兼容手机端》

前记:本来原生的JS是有提供一个函数来实现这个功能(window.clipboardData),但是很遗憾,这个函数仅仅支持IE和FF浏览器,所以基本用处不大。下边介绍的是一个第三方插件库(ZeroClipboard.js)。

 

ZeroClipboard.js在Git上的地址为:https://github.com/zeroclipboard/zeroclipboard

注意:此js库不支持兼容手机端(包括Android、IOS),仅支持PC端浏览器。

 

第一步:将插件库引入到工程中。

把Git上的dist目录copy到自己的目录中(其实只需要ZeroClipboard.js和ZeroClipboard.swf就OK~)

 

脚本文件引入:

<script src="ZeroClipboard.js"></script>

 

第二步:初始化插件库。

var clip = new ZeroClipboard( document.getElementById("d_clip_button"), {
  moviePath: "ZeroClipboard.swf"
} );

 

第三步:上代码。

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <title>Zero Clipboard Test</title>
 5 <meta charset="utf-8">
 6 </head>
 7 <body>
 8 <!-- 
 9     说明:
10     1.data-clipboard-target 输入要复制的对象的ID
11 -->
12 <button id="d_clip_button" class="my_clip_button" data-clipboard-target="fe_text"><b>复制到剪贴板</b></button>
13 <br/>
14 <textarea id="fe_text" cols="50" rows="3">输入需要复制的内容</textarea>
15 </body>
16 </html>
17 <script type="text/javascript" src="ZeroClipboard.js"></script>
18 <script type="text/javascript">
19 //初始化复制对象
20 var clip = new ZeroClipboard( document.getElementById("d_clip_button"), {
21   moviePath: "ZeroClipboard.swf"
22 } );
23 
24 //复制内容到剪贴板成功后的操作
25 clip.on( \'complete\', function(client, args) {
26    alert("复制成功,复制内容为:"+ args.text);
27 } );
28 
29 </script>

以上示例代码注释中已经对Zero Clipboard的功能进行了介绍,需要了解更多的功能请到https://github.com/zeroclipboard/ZeroClipboard

注意:运行环境必须在服务器环境下,否则看不到效果!

 

以上是关于JS实现内容复制功能的主要内容,如果未能解决你的问题,请参考以下文章

js实现一键复制功能

JS实现PCAndroidIOS端的点击按钮复制内容功能

js插件zClip实现复制到剪贴板功能

《JS实现复制内容到剪贴板功能,可兼容所有PC浏览器,不兼容手机端》

用js实现图片复制到剪切板的功能,兼容各种浏览器,例如IE,火狐、chome等。

JS如何实现手机复制功能?