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

33次阅读

共计 1477 个字符,预计需要花费 4 分钟才能阅读完成。

写文章的时候,作为一名业余的码农,常常会在文章中粘贴一些代码。有的时候代码块比拟长,在前期应用中须要复制这段代码就比拟麻烦

参考其余比拟业余的博客零碎,都在代码块上有一个复制代码的按钮。用来疾速复制整个代码块的代码。于是我也想给我的博客减少一个这个性能。

注: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);
}

到此这篇对于为网站代码块 pre 标签减少一个复制代码按钮代码的文章就介绍到这了, 更多相干代码高亮减少复制代码性能内容请搜寻 segmentfault 以前的文章或持续浏览上面的相干文章心愿大家当前多多反对 segmentfault!

正文完
 0