原生js实现复制文本到粘贴板
项目中经常会遇到点击按钮复制订单号、订单id等内容到粘贴板中的需求。可是通常我们都是用Ctrl + c或右击复制的,别操心,js也是有复制命令的,那就是document.execCommand('copy'); 这个命令会将选中的内容复制到粘贴板中,那岂不是还需要选中?别急input和textarea元素有一个select()方法,这个方法可以帮我们自动选中。于是就有了下面的代码,复制过去试试吧!
1 2 3 4 5 6 7 8 9 10 11 | function copy(text) { var input = document.createElement( 'input' ); input.setAttribute( 'readonly' , 'readonly' ); // 防止手机上弹出软键盘 input.setAttribute( 'value' , text); document.body.appendChild(input); // input.setSelectionRange(0, 9999); input.select(); var res = document.execCommand( 'copy' ); document.body.removeChild(input); return res; } |
思路分析:
- 创建input或textarea,因为这两个DOM具有select方法,可以选中内容(document.execCommand('copy')复制内容必要条件);
- 给input赋值为需要赋值的内容
- 将DOM添加到文档中
- 选中输入框中的值(也就是要复制的值)
- 执行复制命令
- 最后别忘了从文档中移除DOM元素
- 此函数最后返回了复制是否成功的结果(true/false,document.execCommand('copy')本身会返回true/false),你可以做相应的交互提示等。
后面实践发现,当要复制的内容中含有tab符号或者换行的符号时,复制的结果就不是想要的结果了,因为input不支持换行,然后textarea是支持的,所以,对这个函数修改了一下,下面这个目前使用起来还没遇到问题,有问题的小伙伴欢迎留言评论
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | /** * @auth zhaodesheng * @param {String} text 需要复制的内容 * @return {Boolean} 复制成功:true或者复制失败:false 执行完函数后,按ctrl + v试试 */ function copy(text) { var textareaEl = document.createElement( 'textarea' ); textareaEl.setAttribute( 'readonly' , 'readonly' ); // 防止手机上弹出软键盘 textareaEl.value = text; document.body.appendChild(textareaEl); textareaEl.select(); var res = document.execCommand( 'copy' ); document.body.removeChild(textareaEl); console.log( "复制成功" ); return res; } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现