為博客園文章中插入的代碼片段加一個運行按鈕

来源:http://www.cnblogs.com/langzs/archive/2017/04/16/6719618.html
-Advertisement-
Play Games

博客園裡大家都分享了很多的有用知識,看到好的代碼,總想拿到手上去試一下,然後慢慢體會!如果是展示一段完整能運行的代碼,若能給讀者提供一個【運行代碼】的按鈕,就方便多了!前兩天開通了博客園的JS許可權(發郵件到[email protected]可以申請開通),今天先拿這個試了一下手,先來體驗一把吧: ...


博客園裡大家都分享了很多的有用知識,看到好的代碼,總想拿到手上去試一下,然後慢慢體會!如果是展示一段完整能運行的代碼,若能給讀者提供一個【運行代碼】的按鈕,就方便多了!前兩天開通了博客園的JS許可權(發郵件到[email protected]可以申請開通),今天先拿這個試了一下手,先來體驗一把吧:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>為行博客園中的代碼添加一個運行代碼按鈕</title>
</head>

<body>
<h1>Hello, world!</h1>
</body>
</html>

點右上方的按鈕試試看吧!沒錯,在一個新視窗中正確的顯示了Hello, world!下麵來說一下實現的步驟:

【情況分析】

博客園裡正常插入的代碼是由一個這樣的大致結構組成的,如下所示:

<div class="cnblogs_code">
    <pre>
        //這裡是你的代碼
        //不過這段代碼是經過cnblogs編輯器重新組織的一段html代碼
    </pre>
</div>

只要能夠獲得這個cnblogs_code下pre里的內容,並將這一段內容輸出到一個新的視窗中,目標基本就實現了。這個實現的方法很簡單,直接用jQuery就可獲得,代碼如下:

var code = $('.cnblogs_code').text();
//註意這裡不要用html(),否則你得到的將是一段cnblogs編輯器重組後的html代碼

如此,基本的思路便出來了:

1)在每一段代碼區後面自動添加一個按鈕,這樣就不用手動去添加代碼按鈕了。看到有些博客朋友是手動添加按鈕和增加一個textarea來放入代碼實現的,這並不科學。

2)為該按鈕綁定動作,點擊時運行對應的代碼片斷。

3)有些代碼片斷不想添加運行代碼按鈕怎麼辦?我們只要手動為每一個代碼斷片增加一個can_run的className(進入到編輯的html模式下添加給代碼區域一個can_run即可),然後在JS中只獲取can_run里的代碼,而不是cnblogs_code下的代碼。如下圖所示:

 【JS代碼的實現】

因為博客園頁面自動引入了jQuery,那麼接下來的實現我全部用jQuery來操作,實現代碼如下:

$(function() {
    /* 獲得整個頁面可被運行的代碼片斷*/
    var code = $('.can_run');

    /*為每個can_run的代碼區域添加按鈕並綁定事件*/
    code.each(function() {
        var button = $('<button class="runcode">運行上面的代碼</button>'), //按鈕
            p = $('<p style="text-align:right;"></p>'), //按鈕加入到段落中
            $this = $(this); //保存當前代碼區域的引用

        /*組織結構,併在can_run之後添加這個結構*/
        p.append(button);
        $this.after(p);

        /*為當前代碼片段對應的按鈕綁定點擊事件*/
        button.on('click', function() {
            var win = window.open('', '_blank', ''); //開啟新視窗
            win.document.write( $this.text() ); //向新視窗輸出內容
        });
    });
});

 

【這個JS代碼放哪?】

1、直接將這段JS保存到本地,然後上傳到你的博客園後臺。【操作路徑:管理 >> 文件 >> 選擇文件並上傳】

2、在博客設置裡加入對這個JS文件的引用【操作路徑:管理 >> 設置 >> 頁首HTML代碼】

<script src="你上傳的js文件位置"></script>

 

【接下來做什麼?】

接下來,你只要像往常一樣將代碼插入到文章中即可,如果有需要提供運行的代碼片斷,直接進入HTML模式,給該片斷加一個can_run的className值即可。這個實現並不是複雜的邏輯,但確實能給我們帶來一定的方便性。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 項目下載地址:http://download.csdn.net/detail/aqsunkai/9805821 (一)yml配置文件: pom.xml加入依賴: 在application.yml文件中加上: 使用一個java類獲取yml文件的內容: 通過依賴註入就可以獲取該對象: 方法內獲取值: ( ...
  • 第一次寫博客,有點小激動。由於我的興趣方向是web前端,所以就給自己設計了個頁面。 這個頁面的主要特點就是磨砂效果,還有背景固定效果。靜止不動首先想到的就是position: fixed,只要將背景圖填滿全屏,再設置固定定位就可以了。不過要註意不能把#home當做固定背景,否則子元素也會固定,滾動條 ...
  • 前言:這是筆者學習之後自己的理解與整理。如果有錯誤或者疑問的地方,請大家指正,我會持續更新! innerHTML 在讀模式下,返回與調用元素的所有子節點(包括元素、註釋和文本節點)對應的 HTML 標記; 在寫模式下,innerHTML 會根據指定的值創建新的 DOM 樹,然後用這個 DOM 樹完全 ...
  • 最近由於項目的需要,做了一個基於JQuery的表格分頁插件封裝,部分源碼來源百度,經由自己封裝完成。 下麵是具體代碼和說明,僅供參考。第一步可以先將我的HTML,CSS,JS這三部分的代碼創建好後先運行看看,下圖是文件目錄展示。 html CSS js 好了,到了這裡如果你完成了創建並且運行可以看到 ...
  • First First Second Second ...
  • There is no doubt that JavaScript是沒有多線程之說的,他只能一件事一件事的做,做完一件事再做下一件事,假如你的js要花一段比較長的時間做一件事的話,那麼瀏覽器將會卡頓一段時間,不對用戶的操作產生響應,這可咋辦呢?謝天謝地,HTML5為我們提供了實現多線程的機制,這麼好... ...
  • 難道還沒有考慮使用HTML5? 當然我猜想你可能有自己的原因;它現在還沒有被廣泛的支持,在IE中不好使,或者你就是喜歡寫比較嚴格的XHTML代碼。HTML5是web開發世界的一次重大的改變,事實上不管你是否喜歡,它都是代表著未來趨勢。其實HTML5並不難理解和使用。我們這裡能列出許多原因為什麼現在要 ...
  • 一、函數定義的方式 (1)普通方式 語法: function 函數名(參數){ 函數體 } Code: function method(){ alert("testMethod"); } method(); Code: function method(){ alert("testMethod"); ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...