【备忘】HTML实现点击复制元素文字

借鉴优快云源码里的点击复制代码(就优快云代码块右上角的复制按钮),其大概思路是创建一个唯一的隐藏的可复制的元素,然后调用window.getSelection()获取选中内容,再使用document.execCommand("copy")执行copy。完整代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>复制文字</title>
</head>
<body>
  <p onclick="copyAble(this)">点我!我是复制内容。</p>
  
  <script>
   /**
    * 可复制的。  
    * @param {Document} element 
    */
    function copyAble(element) {
      var id = 'copy-able-el'
      var scrollTop = document.documentElement.scrollTop;
      var copyElement = document.getElementById(id);
      copyElement|| (copyElement= document.createElement("textarea"),
      copyElement.style.position = "absolute",
      copyElement.style.left = "-9999px",
      copyElement.style.top = scrollTop + "px",
      copyElement.id = id,
      document.body.appendChild(copyElement)),
      copyElement.textContent = element.innerText;
      
      element = id;
      
      if (element = "string" == typeof element ? document.querySelector(element) : element,
        navigator.userAgent.match(/ipad|ipod|iphone/i)) {
          var elementEditable = element.contentEditable
            , elementOnly = element.readOnly;
          element.contentEditable = !0,
          element.readOnly = !0;
          var documentRange = document.createRange();
          documentRange.selectNodeContents(element);
          var selection = window.getSelection();
          selection.removeAllRanges(),
          selection.addRange(documentRange),
          element.setSelectionRange(0, 999999),
          element.contentEditable = elementEditable,
          element.readOnly = elementOnly
      } else {
        copyElement.select()
      }
      document.execCommand("copy")
    }
  </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值