qq_45623125 2022-01-10 16:24 采纳率: 65.5%
浏览 42
已结题

提问,实现点击复制功能

原生的JavaScript怎么实现点击复制功能,但是不能使用 document.execCommand 因为它已经弃用

  • 写回答

2条回答 默认 最新

  • 归来巨星 前端领域新星创作者 2022-01-10 16:43
    关注
    
    /**
     * 一键粘贴
     * @param  {String} id [需要粘贴的内容]
     * @param  {String} attr [需要 copy 的属性,默认是 innerText,主要用途例如赋值 a 标签上的 href 链接]
     *
     * range + selection
     *
     * 1.创建一个 range
     * 2.把内容放入 range
     * 3.把 range 放入 selection
     *
     * 注意:参数 attr 不能是自定义属性
     * 注意:对于 user-select: none 的元素无效
     * 注意:当 id false 且 attr 不会空,会直接复制 attr 的内容
     */
    function copy (id, attr) {
        let target = null;
    
        if (attr) {
            target = document.createElement('div');
            target.id = 'tempTarget';
            target.style.opacity = '0';
            if (id) {
                let curNode = document.querySelector('#' + id);
                target.innerText = curNode[attr];
            } else {
                target.innerText = attr;
            }
            document.body.appendChild(target);
        } else {
            target = document.querySelector('#' + id);
        }
    
        try {
            let range = document.createRange();
            range.selectNode(target);
            window.getSelection().removeAllRanges();
            window.getSelection().addRange(range);
            document.execCommand('copy');
            window.getSelection().removeAllRanges();
            console.log('复制成功')
        } catch (e) {
            console.log('复制失败')
        }
    
        if (attr) {
            // remove temp target
            target.parentElement.removeChild(target);
        }
    }
    

    推荐你参考下下面这篇文章

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 3月5日
  • 已采纳回答 2月25日
  • 创建了问题 1月10日

悬赏问题

  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,