為網(wǎng)站代碼塊pre標(biāo)簽增加一個(gè)復(fù)制代碼按鈕代碼
參考其他比較專業(yè)的博客系統(tǒng),都在代碼塊上有一個(gè)復(fù)制代碼的按鈕。用來快速復(fù)制整個(gè)代碼塊的代碼。于是我也想給我的博客增加一個(gè)這個(gè)功能。
注:chrome測試通過。其他瀏覽器未進(jìn)行測試。
實(shí)現(xiàn)思路:
1、在頁面加載完成之后,使用js給每個(gè)pre標(biāo)簽增加一個(gè)按鈕“復(fù)制代碼”
2、給按鈕增加點(diǎn)擊事件,點(diǎn)擊事件的功能就是復(fù)制代碼塊的內(nèi)容
實(shí)現(xiàn)代碼:
css部分,btn-pre-copy是pre標(biāo)簽中使用js增加的“復(fù)制代碼”按鈕。css的作用是讓他顯示在pre標(biāo)簽的右上角。這里要注意pre標(biāo)簽和按鈕中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標(biāo)簽增加按鈕和實(shí)現(xiàn)拷貝部分,我這里拷貝部分的實(shí)現(xiàn)是先實(shí)例化一個(gè)臨時(shí)的節(jié)點(diǎn)textarea,然后吧pre的內(nèi)容設(shè)置進(jìn)這個(gè)臨時(shí)節(jié)點(diǎn),然后選中內(nèi)容進(jìn)行復(fù)制,最后銷毀這個(gè)節(jié)點(diǎn)。具體參考代碼。js部分有依賴于jquery
$(function(){
//給每一串代碼元素增加復(fù)制代碼節(jié)點(diǎn)
let preList = $(".content pre");
for (let pre of preList) {
//給每個(gè)代碼塊增加上“復(fù)制代碼”按鈕
let btn = $("<span class=\"btn-pre-copy\" onclick='preCopy(this)'>復(fù)制代碼</span>");
btn.prependTo(pre);
}
});
/**
* 執(zhí)行復(fù)制代碼操作
* @param obj
*/
function preCopy(obj) {
//執(zhí)行復(fù)制
let btn = $(obj);
let pre = btn.parent();
//為了實(shí)現(xiàn)復(fù)制功能。新增一個(gè)臨時(shí)的textarea節(jié)點(diǎn)。使用他來復(fù)制內(nèi)容
let temp = $("<textarea></textarea>");
//避免復(fù)制內(nèi)容時(shí)把按鈕文字也復(fù)制進(jìn)去。先臨時(shí)置空
btn.text("");
temp.text(pre.text());
temp.appendTo(pre);
temp.select();
document.execCommand("Copy");
temp.remove();
//修改按鈕名
btn.text("復(fù)制成功");
//一定時(shí)間后吧按鈕名改回來
setTimeout(()=> {
btn.text("復(fù)制代碼");
},1500);
}
這里在gitee上做了一個(gè)簡單的demo。demo示例:

在線測試:http://demo.jb51.net/js/2021/code_copy/
到此這篇關(guān)于為網(wǎng)站代碼塊pre標(biāo)簽增加一個(gè)復(fù)制代碼按鈕代碼的文章就介紹到這了,更多相關(guān)代碼高亮增加復(fù)制代碼功能內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
JS實(shí)現(xiàn)的簡單折疊展開動(dòng)畫效果示例
這篇文章主要介紹了JS實(shí)現(xiàn)的簡單折疊展開動(dòng)畫效果,可實(shí)現(xiàn)類似百度頁面分享按鈕一樣的折疊展開動(dòng)畫效果,涉及javascript頁面元素屬性動(dòng)態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-04-04
微信小程序picker組件兩列關(guān)聯(lián)使用方式
這篇文章主要介紹了微信小程序picker組件兩列關(guān)聯(lián)使用方式,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
webpack打包后index.html引用文件地址問題小結(jié)
在前端開發(fā)中,src 屬性指定的相對(duì)路徑是相對(duì)于當(dāng)前 HTML 文件的路徑,而不是相對(duì)于網(wǎng)站的根目錄,這篇文章主要介紹了webpack打包后index.html引用文件地址問題,需要的朋友可以參考下2024-05-05
淺析JavaScript回調(diào)函數(shù)應(yīng)用
這篇文章主要為大家詳細(xì)介紹了JavaScript回調(diào)函數(shù)應(yīng)用,感興趣的朋友可以參考一下2016-05-05

