美文网首页JavaScr...
JavaScript点击按钮一键复制指定文本内容

JavaScript点击按钮一键复制指定文本内容

作者: loclink | 来源:发表于2022-04-28 10:57 被阅读0次

    概述:

    最近项目中有个一键点击按钮复制文本的需求,在此之前一直使用的都是document.execCommand('Copy')这个方法。百度出来的结果清一色的也都是使用的这个方法,反正网上的文章大家抄来抄去的我也就不吐槽了。

    image.png

    方法一:

    思路就是先调用选中文本内容的方法,把上面这段文本先选中,然后再调用document.execCommand('Copy')可以直接复制已被选中的文本。

    const selection = window.getSelection(); // 该方法获取一个selection对象
    selection.selectAllChildren(element) // 该方法从selection对象中取出可被选择的目标元素并选中,选中前将清除之前的选中
    document.execCommand('Copy')  //  该方法允许运行copy命令直接复制已被选中的可编辑内容区域的元素。
    

    完整代码如下:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <div class="message">这段文本将被复制</div>
        <button class="btn">点击复制</button>
        <script>
          const copyEl = document.querySelector('.message')
          const btnEl = document.querySelector('.btn')
    
          btnEl.addEventListener('click', () => {
            window.getSelection().selectAllChildren(copyEl)
            document.execCommand('Copy')
          })
        </script>
      </body>
    </html>
    

    该方法存在兼容性问题,在mdn中也提到getSelectionselectAllChildren都是实验性功能。并且document.execCommand()方法已被弃用,随时可能从ECMA标准中移除。

    方法二:navigator.clipboard.writeText('message')

    该方法更为简单实用,且兼容性更好,废话不多说,直接上代码:

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>Document</title>
      </head>
      <body>
        <div class="message">这段文本将被复制</div>
        <button class="btn">点击复制</button>
        <script>
          const copyEl = document.querySelector('.message')
          const btnEl = document.querySelector('.btn')
    
          btnEl.addEventListener('click', () => {
            // 该方法可以写入特定字符串到操作系统的剪切板,并返回一个Promise
            // 一旦剪贴板的内容被更新,它就会被解析。如果调用者没有写入剪贴板的权限,则拒绝写入剪切板(reject)
            navigator.clipboard
              .writeText(copyEl.textContent)
              .then(() => {
                console.log('复制成功')
              })
              .catch(() => {
                console.log('复制失败')
              })
          })
        </script>
      </body>
    </html>
    

    该方法可以写入特定字符串到操作系统的剪切板,并返回一个Promise,复制成功调用resolve,复制失败调用reject,比方法一更方便快捷。选他就完事了。

    转载请注明出处

    相关文章

      网友评论

        本文标题:JavaScript点击按钮一键复制指定文本内容

        本文链接:https://www.haomeiwen.com/subject/xlgryrtx.html