点击即复制

本文介绍了一种使用span标签实现点击即复制功能的方法,兼容Google、Firefox、IE(11,10,9,8)、Edge等浏览器。通过onclick和oncopy事件结合document.execCommand和clipboardData接口,实现了跨浏览器的文本复制。

前端实现,span标签的点击即复制功能,兼容性目前只测试了Google浏览,Firefox浏览器,Edge浏览器,IE浏览器(11,10,9,8版本,8之下版本未测试);

代码如下:

 1 <!--(c) Copyright 2018 TenglongWenTian. All Rights Reserved. -->
 2 <!DOCTYPE html>
 3 <html>
 4     <head>
 5         <meta charset="utf-8" />
 6         <title>点击即复制</title>
 7     </head>
 8     <body>
 9         <h1>点击即复制</h1>
10         <p>1.针对span标签</p>
11         <p>2.onclick事件以及oncopy事件</p>
12         <span onclick='execClick();' oncopy='execCopy(event,this);' data-value='我是密码' title='点击复制地址及密码'>我是span标签,鼠标左键点击我即复制,兼容Google,Firefox,IE(11,10,9,8,后面的没测),Edge.</span>
13         <script type="text/javascript" src="js/jquery.min.js"></script>
14         <script type="text/javascript">
15             /**
16              * 点击复制
17              */
18             function execClick() {
19                 document.execCommand("copy");
20             }
21             /**
22              * 点击复制
23              * @param event
24              * @param obj
25              */
26             function execCopy(event, obj) {
27                 if(isIE()) {
28                     if(window.clipboardData) {
29                         if(isNull($(obj).attr("data-value"))) {
30                             window.clipboardData.setData("Text", "链接:" + obj.textContent + " 密码:" + $(obj).attr("data-value"));
31                             alert('复制成功!');
32                         } else {
33                             window.clipboardData.setData("Text", obj.textContent);
34                             alert('复制成功!');
35                         }
36                     }
37                 } else {
38                     event.preventDefault();
39                     if(event.clipboardData) {
40                         if(isNull($(obj).attr("data-value"))) {
41                             event.clipboardData.setData("text/plain", "链接:" + obj.textContent + " 密码:" + $(obj).attr("data-value"));
42                             alert('复制成功!');
43                         } else {
44                             event.clipboardData.setData("text/plain", obj.textContent);
45                             alert('复制成功!');
46                         }
47                     }
48                 }
49             }
50             /**
51              * 是否IE
52              * @returns {*}
53              */
54             function isIE() {
55                 var input = window.document.createElement("input");
56                 if(window.ActiveXObject === undefined) return null;
57                 if(!window.XMLHttpRequest) return 6;
58                 if(!window.document.querySelector) return 7;
59                 if(!window.document.addEventListener) return 8;
60                 if(!window.atob) return 9;
61                 if(!input.dataset) return 10;
62                 return 11;
63             }
64             /**
65              * 非空判断
66              * @param val
67              * @returns {boolean}
68              */
69             function isNull(val) {
70                 if(val == undefined || val == null || val == "") {
71                     return false;
72                 } else {
73                     return true;
74                 }
75             }
76         </script>
77     </body>
78 
79 </html>

不要局限于语言,希望评论留言,虽然不一定回复,但是有空会看的。

 转载请注明出处,未经许可请勿私自添加水印,否则有权追究法律责任。

转载于:https://www.cnblogs.com/tenglongwentian/p/10167712.html

在Vue3项目中实现“点击复制”功能,我们可以借助原生JavaScript的`Clipboard API`或者传统的`document.execCommand('copy')`方法。以下是具体的实现步骤: ### 实现方案 #### 方法一: 使用 Clipboard API (推荐) ```vue <template> <button @click="handleCopy">点击复制</button> </template> <script setup> import { ref } from 'vue' const textToCopy = ref("这是需要复制的内容") function handleCopy() { navigator.clipboard.writeText(textToCopy.value).then(() => { alert("内容已成功复制到剪贴板") }).catch(err => { console.error("无法复制文本", err); }); } </script> ``` **说明**: `navigator.clipboard.writeText()` 是现代浏览器提供的直接操作剪贴板的方法。 --- #### 方法二: 兼容性更好的 document.execCommand 方式 如果目标设备或环境尚未完全支持`Clipboard API`,可以考虑使用传统的方式: ```vue <template> <div> <input type="text" id="textInput" :value="textToCopy"/> <button @click="oldHandleCopy">点击复制(兼容模式)</button> </div> </template> <script setup> import { ref } from 'vue' const textInputRef = ref(null) // 要复制的文字 const textToCopy = "这是一段文字" function oldHandleCopy() { const inputElement = textInputRef.value; if(inputElement) { // 将输入框内的值选中并执行拷贝命令 inputElement.select(); inputElement.setSelectionRange(0,9999); // 对于移动设备的支持处理 document.execCommand('copy'); alert("已复制"); } } </script> ``` **注意**: 这种方式已被部分主流浏览器逐步废弃,建议仅用于低版本浏览器兼容场景。 --- ### 总结: 以上两种方式都可以满足需求,“Clipboard API”更简洁安全;而 “execCommand” 则有更好向后兼容性。实际选用需根据项目技术栈、目标用户群体等因素综合判断。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值