最近在项目中须要点击复制的功能,而后百度看了一下网上的各类方法,有引用插件的(不太理想,一个功能就引用一个插件,代码太冗余了),有本身封装的(可能技术发展比较快,有些都失效了),可是根据他们的介绍,本身找到相关的API,总结了一下,适用于Chrome Firefox (Gecko) Internet Explorer(9+) Opera Safaricss
建立一个Range对象
let range = document.createRange() // 传入须要选中的元素节点 range.selectNodeContents(Node节点)
建立一个Selection对象
var selection = document.getSelection() // 清空选中的区域 selection.removeAllRanges() // 添加选中区域 selection.addRange(range)
调用复制
document.execCommand('Copy')
function copyHandler(node){ let range = document.createRange() range.selectNodeContents(node) let selection = document.getSelection() selection.removeAllRanges() selection.addRange(range) document.execCommand('Copy') }
弊端
须要建立多余的标签,并且input和textarea必须显示,设置如下任何一个样式都不起做用:html
display:none visibility:hidden width:0 height:0
仍是直接上代码看吧node
<div class='error-correction-row'> <label class='talqs-label'>ID</label> <span class="question-id-main">fa020e90e7de4bd0d399ezvzvvzvz58a5fab92f7</span> <textarea class='queIdInput' id='queIdInput' value='fa020e90e7de4bd0d399ezvzvvzvz58a5fab92f7' /> <button class='question-id-btn' id='question-id-btn' @click="copyHandler">复制</button> </div>
<style> // 这样设置就能够在点击复制的时候看不到textarea元素 .queIdInput{ border: none; width: 1px; height:1px; outline: none; opacity: 0; } </style>
<script> let copyBtn=dcoument.getElementById('question-id-btn') copyBtn.addeventlistener("click",copyHandler,false) function copyHandler(){ let queIdInput=dcoument.getElementById('queIdInput') queIdInput.select() document.execCommand('Copy')Ï } </script>