JS实现剪切板功能
Posted Jessey45
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS实现剪切板功能相关的知识,希望对你有一定的参考价值。
某次面试中被问到过,类似的还有用文本实现js的撤销恢复功能。
核心原理: 利用浏览器提供的copy命令
参考链接
注意: 对ipad、iphone等苹果移动端需做单独处理
document.execCommand("copy");
- 如果是复制输入框里的内容,可以通过 select() 方法,选中输入框的文本,然后调用 copy 命令,复制文本。 注意: select() 方法只对 <input> 和 <textarea> 有效。
var obj= document.getElementById("demo"); obj.select(); document.execCommand("copy");
- 如果是复制非输入框中的文本,则需先创建一个输入框,进行复制后,再清除这个输入框。
var input = document.createElement(\'input\'); input.setAttribute(\'readonly\', \'readonly\'); input.setAttribute(\'value\', value); document.body.appendChild(input); input.select(); if (document.execCommand(\'copy\')) { document.execCommand(\'copy\'); } document.body.removeChild(input);
完整兼容性代码:
用到的知识点:
1 window.getSelection:返回一个Selection对象,返回用户选择的文本范围或光标当前位置 参考链接
2 document.creatRange():创建一个range对象,选择结点范围 参考链接
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>测试复制粘贴功能</title> </head> <body> <div> <label>卡号:</label> <input type="text" size="20" name="IDCard" id="IDCard"> <button class="copy" onClick="copy(\'IDCard\')">复制</button> </div> <div> <label>用户名:</label> <input type="text" size="20" name="IDUserName" id="IDUserName"> <button class="copy" onClick="copy(\'IDUserName\')">复制</button> </div> <script type="text/javascript"> function copy(type) { var textBox = document.getElementById(type); copyText(textBox); } function copyText(node) { if (!node) { return; } var result; var tempTextarea = document.createElement(\'textarea\'); document.body.appendChild(tempTextarea); if (typeof(node) == \'object\') { if (node.value) { tempTextarea.value = node.value; } else { tempTextarea.value = node.innerHTML; } } else { tempTextarea.value = node; } //判断设备 var u = navigator.userAgent; if (u.match(/(iPhone|iPod|iPad);?/i)) { window.getSelection().removeAllRanges(); var range = document.createRange(); range.selectNode(tempTextarea); window.getSelection().addRange(range); result = document.execCommand(\'copy\'); window.getSelection().removeAllRanges(); } else { tempTextarea.select(); result = document.execCommand(\'Copy\'); } document.body.removeChild(tempTextarea); if (result) { alert(\'复制成功\', { removeTime: 1000 }) } else { alert(\'复制失败\', { removeTime: 1000 }) } return result; } </script> </body> </html>
ps:也可以使用clipboard.js等开源项目。
以上是关于JS实现剪切板功能的主要内容,如果未能解决你的问题,请参考以下文章
记录使用clipboard.js实现点击复制链接到剪切板的历程
js 剪切板的用法(clipboardData.setData)
vue获取剪切板内容_Vue通过clipboard插件实现复制到剪切板功能