给pre添加复制按钮

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

<div class="News_con" id="News_con">
'P_Con' class="brush:css">.main{float:left; width:100px;}
<div class='Copy_btn'>div> div>
$(function(){
        // 需要等页面上的代码加载完成后,给右上角的标签区域加上一个按钮。
        $('.Copy_btn').each(function(i) { 
            var str = "  ";
            $(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("复制成功!");
    }


$(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

这个代码我试过了,复制的是全部页面内容,我想要复制pre内的内容,而且需要多个pre复制(数组i++)

望采纳!!!点击回答右侧采纳即可!!
试试我的代码

<div class="News_con" id="News_con">
    <pre id='P_Con' class="brush:css">.main{float:left; width:100px;}</pre>
    <div class='Copy_btn'>
        <input type='button' onclick='copy("P_Con")' value='复制'>
    </div>
</div>

<script>
    function copy(id) {
        var text = document.getElementById(id).innerText;
        var input = document.createElement("textarea");
        input.text = text;
        document.body.appendChild(input);  
        input.select(); 
        document.execCommand("Copy");
        document.body.removeChild(input);
        alert("复制成功!")
    }
</script>



在循环中,触发copy事件中的text是否正确;pre.text()这个pre对象是否定义了

提供参考实例【js 【实用技巧】给全文代码添加一键复制按钮】,链接:https://blog.csdn.net/weixin_41192489/article/details/117170212

我可以给您提供几种在HTML中为

标签添加复制按钮的方法。

使用JavaScript和HTML添加按钮:

<pre>
  <code id="code">
    这里是要复制的文本
  </code>
</pre>
<button id="copy-button" onclick="copyCode()">复制</button>
<script>
  function copyCode() {
    var copyText = document.getElementById("code");
    navigator.clipboard.writeText(copyText.textContent).then(function() {
      console.log("复制成功!");
    }, function(err) {
      console.error("复制失败:", err);
    });
  }
</script>

使用clipboard.js库添加按钮:

<pre>
  <code class="language-js" id="code">
    这里是要复制的文本
  </code>
</pre>
<button class="btn" data-clipboard-target="#code">复制</button>
<script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.4/clipboard.min.js"></script>
<script>
  var clipboard = new ClipboardJS('.btn');
  clipboard.on('success', function(e) {
    console.log("复制成功!");
    e.clearSelection();
  });
  clipboard.on('error', function(e) {
    console.error("复制失败:", e);
  });
</script>

这两种方法都是基于clipboard.js库,可以支持大多数现代浏览器使用。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>复制功能</title>
    <style>
        .copy-class {
            background: #DEE1E6;
            width: 20%;
        }
    </style>
</head>
<body>

<pre id="copy" class="copy-class">
    1. 复制功能,这是需要复制的内容
    2. 复制功能,这是需要复制的内容
    3. 复制功能,这是需要复制的内容
</pre>

<script>
    // 点击 pre 区域,完成复制
    var copyDom = document.getElementById("copy");
    copyDom.onclick = function () {
        let textarea = document.createElement('textarea');
        textarea.setAttribute('readonly', 'readonly')
        textarea.value = copyDom.innerText
        document.body.appendChild(textarea)
        // 选取文本域中的内容
        textarea.select()
        document.execCommand("Copy");
        document.body.removeChild(textarea)
        alert('复制成功')
    }
</script>
</body>
</html>