为网站代码块pre标签增加一个复制代码按钮代码

作者:李清灿 时间:2024-04-10 10:49:27 

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

注: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示例:

为网站代码块pre标签增加一个复制代码按钮代码

在线测试:http://demo.aspxhome.com/js/2021/code_copy/

来源:http://qclog.cn/1060

标签:代码高亮,复制代码
0
投稿

猜你喜欢

  • Explain命令在优化查询中的实际应用

    2024-01-20 03:54:13
  • 浅析python中特殊文件和特殊函数

    2023-01-22 23:26:26
  • Python NumPy教程之数据类型对象详解

    2022-03-29 09:05:19
  • Python单例模式实例分析

    2023-11-26 03:22:52
  • python字符串切片及常用方法示例详解

    2021-01-02 15:40:20
  • pytest官方文档解读fixtures的autouse

    2023-06-22 01:18:58
  • 公用样式模板的设计制作

    2009-09-13 21:27:00
  • Python函数中4种参数的使用教程

    2023-03-06 23:06:03
  • 在Mac中PyCharm配置python Anaconda环境过程图解

    2023-10-19 01:22:53
  • ASP和MYSQL开发网站的注意事项

    2009-08-21 13:23:00
  • PHP版微信小店接口开发实例

    2023-11-10 11:56:06
  • RHEL下架设MYSQL集群

    2008-12-24 16:05:00
  • 分析python动态规划的递归、非递归实现

    2022-08-24 02:31:21
  • 关于Pytorch中模型的保存与迁移问题

    2023-08-11 04:05:25
  • Python多模块引用由此引发的相对路径混乱问题

    2021-07-11 03:57:10
  • 利用arcgis的python读取要素的X,Y方法

    2023-03-13 11:27:05
  • 开展全面的网站评估

    2007-09-27 19:21:00
  • pytorch查看torch.Tensor和model是否在CUDA上的实例

    2023-06-16 16:41:22
  • MS SQL 查询数据在数据库中所在行

    2009-04-26 19:36:00
  • 利用C#远程存取Access数据库

    2024-01-27 01:58:32
  • asp之家 网络编程 m.aspxhome.com