為網站程式碼塊pre標籤增加一個複製程式碼按鈕程式碼
阿新 • • 發佈:2021-11-22
參考其他比較專業的部落格系統,都在程式碼塊上有一個複製程式碼的按鈕。用來快速複製整個程式碼塊的程式碼。於是我也想給我的部落格增加一個這個功能。
注:chromhttp://www.cppcns.come測試通過。其他瀏覽器未進行測試。
實現思路:
1、在頁面載入完成之後,使用給每個pre標籤增加一個按鈕“複製程式碼”
2、給按鈕增加點選事件,點選事件的功能就是複製程式碼塊的內容
實現程式碼:
部分,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部分有依賴於
$(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); http://www.cppcns.com let pre = btn.parent(); //為了實現複製功能。新http://www.cppcns.com增一個臨時的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標籤增加一個複製程式碼按鈕程式碼的文章就介紹到這了,更多相關程式碼高亮增加複製程式碼功能內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!