CSDN中根據文章自動生成文章目錄


概述

CSDN中有根據文件內容中H標簽在文章中自動生成文章目錄,看起來比較專業,就想把它搬到自己的博客園中。類似下圖

image

 

提取JS腳本

通過瀏覽器開發者工具(IE/Chrome)找到產生文章目錄javascript腳本(我直接用IE開發工具中搜索相關字符串”系統根據文章中H1到H6標簽自動生成文章目錄”搜索到的),

並把其中文章內容ID修改成博客園的ID(#cnblogs_post_body)

產生腳本如下腳本如下:

$(document).ready(function() {
    buildCTable();
    });

function buildCTable() {
    var hs = $('#cnblogs_post_body').find('h1,h2,h3,h4,h5,h6');
    if (hs.length < 2)
        return;
    var s = '';
    s += '<div style="clear:both"></div>';
    s += '<div class="cnblogs_toc">';
    s += '<p style="text-align:right;margin:0;"><span style="float:left;">目錄<a href="#" title="系統根據文章中H1到H6標簽自動生成文章目錄">(?)</a></span><a href="#" onclick="javascript:return openct(this);" title="展開">[+]</a></p>';
    s += '<ol style="display:none;margin-left:14px;padding-left:14px;line-height:160%;">';
    var old_h = 0, ol_cnt = 0;
    for (var i = 0; i < hs.length; i++) {
        var h = parseInt(hs[i].tagName.substr(1), 10);
        if (!old_h)
            old_h = h;
        if (h > old_h) {
            s += '<ol>';
            ol_cnt++;
        }
        else if (h < old_h && ol_cnt > 0) {
            s += '</ol>';
            ol_cnt--;
        }
        if (h == 1) {
            while (ol_cnt > 0) {
                s += '</ol>';
                ol_cnt--;
            }
        }
        old_h = h;
        var tit = hs.eq(i).text().replace(/^\d+[.、\s]+/g, '');
        tit = tit.replace(/[^a-zA-Z0-9_\-\s\u4e00-\u9fa5]+/g, '');

        if (tit.length < 100) {
            s += '<li><a href="#t' + i + '">' + tit + '</a></li>';
            hs.eq(i).html('<a name="t' + i + '"></a>' + hs.eq(i).html());
        }
    }
    while (ol_cnt > 0) {
        s += '</ol>';
        ol_cnt--;
    }
    s += '</ol></div>';
    s += '<div style="clear:both"><br></div>';
    $(s).insertBefore($('#cnblogs_post_body'));
}

function openct(e) {
    if (e.innerHTML == '[+]') {
        $(e).attr('title', '收起').html('[-]').parent().next().show();
    } else {
        $(e).attr('title', '展開').html('[+]').parent().next().hide();
    }
    e.blur();
    return false;
}

 

編寫CSS樣式

腳本中產生文章目錄樣式通過cnblogs_toc來自定義,可以按照不同需求來定義。我這里把我的定義寫出來;

我也是按照CSDN的樣式不斷調整的,最終還是和CSDN有點不一樣。

.cnblogs_toc {
   float:left; 
   min-width:200px;
   padding: 4px 10px;
   font-size: 12px; 
   background-color: #eee;
   border: 1px solid #ccc;
}
 
.cnblogs_toc a {
   color: #369;
   border-bottom: 0px;
}

.cnblogs_toc ol {
  
   margin: 5px 14px 5px;
   line-height: 160%;
}

.cnblogs_toc li {
   list-style: decimal;
}

 

博客園設置

在博客園中啟用自動產生文章目錄的腳本,需要在管理設置中添加新增的腳本和CSS。

  • 在博客園文件頁中把javascript文件上傳到服務器,並獲取到文件連接地址。
  • 在博客園設置頁中添加自定義腳本文件,在”頁首Html代碼”中添加<script src="http://files.cnblogs.com/files/Quincy/buildCTable.js" type="text/javascript"></script>

        image

  • 在博客園設置頁中添加自定義CSS,在”頁面定制CSS代碼”中添加自己的CSS代碼

        image

  • 修改完畢保存后,確定文章中的帶有H標簽的就可以生成目錄

 

其他TOC方法

根據文件內容產生文章目錄現在已經有好多腳本可以實現,我之前使用過一個TableOfContents Plugin for jQuery的腳本,也可以產生文件目錄,具體參考

腳本文件http://files.cnblogs.com/files/Quincy/jquery.tableofcontents.js

 

參考引用

參考本文:http://www.5ycode.com/283


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM