阳光与我同行 2023-01-11 15:58 采纳率: 50%
浏览 95
已结题

给pre添加复制按钮

给pre添加复制按钮,研究好久没成功,请教大家如何才能实现:

<div class="News_con" id="News_con">
<pre id='P_Con' class="brush:css">.main{float:left; width:100px;}
<div class='Copy_btn'></div> </div>
$(function(){
        // 需要等页面上的代码加载完成后,给右上角的标签区域加上一个按钮。
        $('.Copy_btn').each(function(i) { 
            var str = "  <input type='button' onclick='copy("</span>+i+<span class="hljs-string">")' value='复制'>";
            $(this).append(str);
        }); 
    })
    
 function copy(i){
        var  text = $("#News_con pre").eq(i).text();
        var input = $("pre");
        input.text = pre.text();
        document.body.appendChild(pre);  
        input.select(); // 选取文本域中的内容.
        document.execCommand("Copy");
        //再移除输入框
        //document.body.removeChild(input);
        //vm.$message.success("复制成功!");
    }

  • 写回答

7条回答 默认 最新

  • Minuw 2023-01-11 16:04
    关注
    
    $(function(){
        //给每一串代码元素增加复制代码节点
        let preList = $(".content pre");
        for (let pre of preList) {
            //给每个代码块增加上“复制代码”按钮
            let btn = $("<span class=\"btn-pre-copy\" onclick='preCopy(this)'>复制代码</span>");
            btn.prependTo(pre);
        }
    });
     
    /**
        * 执行复制代码操作
        * @param obj
        */
    function preCopy(obj) {
        //执行复制
        let btn = $(obj);
        let pre = btn.parent();
        //为了实现复制功能。新增一个临时的textarea节点。使用他来复制内容
        let temp = $("<textarea></textarea>");
        //避免复制内容时把按钮文字也复制进去。先临时置空
        btn.text("");
        temp.text(pre.text());
        temp.appendTo(pre);
        temp.select();
        document.execCommand("Copy");
        temp.remove();
        //修改按钮名
        btn.text("复制成功");
        //一定时间后吧按钮名改回来
        setTimeout(()=> {
            btn.text("复制代码");
        },1500);
    }
    

    https://blog.csdn.net/ab1068/article/details/123432749

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月19日
  • 创建了问题 1月11日