>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 9742 个阅读者 刷新本主题
 * 贴子主题:  为网站代码块pre标签增加一个复制代码按钮代码 回复文章 点赞(0)  收藏  
作者:ab1068    发表时间:2024-04-07 03:56:24     消息  查看  搜索  好友  邮件  复制  引用

写文章的时候,作为一名专业的码农,经常会在文章中粘贴一些代码。有的时候代码块比较长,在后期使用中需要复制这段代码就比较麻烦

参考其他比较专业的博客系统,都在代码块上有一个复制代码的按钮。用来快速复制整个代码块的代码。于是我也想给我的博客增加一个这个功能。

注:chrome测试通过。其他浏览器未进行测试。

实现思路:

1、在页面加载完成之后,使用js给每个pre标签增加一个按钮“复制代码”

2、给按钮增加点击事件,点击事件的功能就是复制代码块的内容

实现代码:

css部分,btn-pre-copy是pre标签中使用js增加的“复制代码”按钮。css的作用是让他显示在pre标签的右上角。这里要注意pre标签和按钮中position属性

.content pre{
    position: relative;
    background-color: #f5f5f5;
    border: 1px solid #ccc;
    border-radius: 4px;
    padding: 10px;
}
pre .btn-pre-copy{
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    -khtml-user-select: none;
    user-select: none;
    position: absolute;
    top: 10px;
    right: 12px;
    font-size: 12px;
    line-height: 1;
    cursor: pointer;
    color: hsla(0,0%,54.9%,.8);
    transition: color .1s;
}

js部分,js部分主要是给pre标签增加按钮和实现拷贝部分,我这里拷贝部分的实现是先实例化一个临时的节点textarea,然后吧pre的内容设置进这个临时节点,然后选中内容进行复制,最后销毁这个节点。具体参考代码。js部分有依赖于jquery

$(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);
}

这里在gitee上做了一个简单的demo。demo示例:



在线测试:http://demo.jb51.net/js/2021/code_copy/

到此这篇关于为网站代码块pre标签增加一个复制代码按钮代码的文章就介绍到这了。


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Java注解
  JavaWeb开发-->Servlet技术详解(Ⅰ)
  JSP与Hibernate开发-->使用JPA和注解
  Java网络编程-->对象的序列化与反序列化
  精通Spring-->Vue CLI脚手架工具
  Vue3开发-->Vue简介
  java的三种随机数生成方式
  BIO、NIO和AIO的区别、三种IO的原理与用法
  Java设计模式: 里氏替换原则和合成复用原则详解
  用VisualVM远程监控Java进程
  使用策略模式优化代码实践,如何让项目快速起飞
  Eclipse和MyEclipse的区别
  请求大佬们的帮助
  使用 RocketMQ 事务消息,实现分布事务
  Java中的受查异常与非受查异常区别
  Eclipse使用指南:创建Java项目的步骤
  Eclipse使用指南:常用视图(View) 的用法
  Java设计模式:状态模式
  Java入门实用代码:获取本机IP地址及主机名
  Java入门实用代码:打印平行四边形
  Java入门实用代码:字符串优化测试
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。