CSDN中根据文章自动生成文章目录

时间:2022-07-06 18:52:19

概述

CSDN中有根据文件内容中H标签在文章中自动生成文章目录,看起来比较专业,就想把它搬到自己的博客园中。类似下图

CSDN中根据文章自动生成文章目录

提取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>

CSDN中根据文章自动生成文章目录

  • 在博客园设置页中添加自定义CSS,在”页面定制CSS代码”中添加自己的CSS代码

CSDN中根据文章自动生成文章目录

  • 修改完毕保存后,确定文章中的带有H标签的就可以生成目录

其他TOC方法

根据文件内容产生文章目录现在已经有好多脚本可以实现,我之前使用过一个TableOfContents Plugin for jQuery的脚本,也可以产生文件目录,具体参考

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

参考引用

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

CSDN中根据文章自动生成文章目录的更多相关文章

  1. 用jquery实现文章自动生成二级目录(续)

    前文:用jquery实现文章自动生成二级目录. 使用方法的补充 我们可以把我们的js和css上传到博客园,然后在页面HTML代码中使用他们. 发现的一些问题 在我把我的js放到自己的博客园上运行之后发 ...

  2. 用jquery实现文章自动生成二级目录

    前段时间有个同学问有没有办法在博客园上发一篇文章然后自动生成文章的目录.之前不知道该怎么做这几天看了些jquery之后觉得还是容易的. 一级目录 一级目录的思路很简单,找出作为一级标题的元素,在某个地 ...

  3. 第 10 篇:小细节 Markdown 文章自动生成目录,提升阅读体验

    目录 在文中插入目录 在页面的任何地方插入目录 处理空目录 美化标题的锚点 URL 作者:HelloGitHub-追梦人物 文中涉及的示例代码,已同步更新到 HelloGitHub-Team 仓库 上 ...

  4. 用React实现一个自动生成文章目录的组件

    原文地址:小寒的博客 功能介绍 这个组件的效果呐,就是你在浏览这个页面的时候点击右上角的叉叉看到的那个文章目录. 功能很简单,就是根据文章内容自动生成这个目录,可以快速跳转. 需要的知识点 正则 do ...

  5. TP自动生成模块目录

    TP自动生成模块目录 例如我想在项目中增加一个AdminI模块 只需要在入口文件index.php中添加: define('BIND_MODULE','Admin'); 再访问127.0.0.1项目就 ...

  6. Jquery实现自动生成二级目录

    在博客园开通博客以后,就看到某位博友写的js自动生成目录的文章,当时觉得生成目录能给阅读带来方便,所以就直接拿来使用了.用了一段时间以后,发现只能生成一级目录,不能生成多级目录,有点美中不足.所以想着 ...

  7. JavaScript自动生成博文目录导航

    转载于:JavaScript自动生成博文目录导航 我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到 具体的内容 ...

  8. JavaScript自动生成博文目录导航&sol;TOP按钮

    博客园页面添加返回顶部TOP按钮 进入网页管理->设置 在"页面定制CSS代码"中添加如下css样式,当然你可以改为自己喜欢的样式 此处可以将背景色background-co ...

  9. JavaScript:自动生成博文目录导航

    感谢 孤傲苍狼 分享了 自动生成博文目录的方法,本文仅作存档使用. 图 1:效果预览 CSS 样式 #TOCbar{ font-size:12px; text-align:left; position ...

随机推荐

  1. HDU 1025 Constructing Roads In JGShining&&num;39&semi;s Kingdom(二维LIS)

    Constructing Roads In JGShining's Kingdom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  2. Oracle练习题&lpar;1~19&rpar;

    1. 查询Student表中的所有记录的Sname.Ssex和Class列. 2. 查询教师所有的单位即不重复的Depart列. 3. 查询Student表的所有记录. 4. 查询Score表中成绩在 ...

  3. Ubuntu安装gevent

    今天在安装包的过程中,按照网上的文章,出错,找了很久,最后才安装成功,希望能解决以后大家遇到的问题 Ubuntu安装gevent Gevent是一个基于greenlet的Python的并发框架,以赖于 ...

  4. git 使用随笔

    /*将远端库git@github.com:myrepo/base.git从远端clone到本地*/git clone git@github.com:myrepo/base.git /*克隆版本库的时候 ...

  5. mysqld守护进程

    1.安装方式:安装文件:可执行的二进制文件: 源代码编译. 2.版本选择:常见版本区别:GA(一般应用,尽量使用最新版本)/RC(候选发布版本)/测试版本实版本选择主要是够用.适用.好用!不一定是最新 ...

  6. 物理Data Guard主备切换步骤

    物理Data Guard角色转换步骤   Step  1   验证主库是否能执行角色转换到备库(原主库执行) SQL> SELECT SWITCHOVER_STATUS FROM V$DATAB ...

  7. &period;NET的HTTP辅助类:RestSharp

    示例: var client = new RestClient("http://example.com");// client.Authenticator = new HttpBa ...

  8. 阶段01Java基础day16集合框架02

    16.01_集合框架(去除ArrayList中重复字符串元素方式1) A:案例演示 需求:ArrayList去除集合中字符串的重复值(字符串的内容相同) 思路:创建新集合方式 /** * A:案例演示 ...

  9. 戴尔R710服务器安装系统——配置raid

    一,内存二,硬盘(分区,数据量大小)三,电源线,网络线四,raid(raid0,raid1,raid5) 从这里开始 1.进入系统时不用管,默认进入即可 2.在读完内存消息之后,开始读取磁盘消息,在出 ...

  10. leetcode python 005

    ##  给定字符串,寻找最长回文子串##  单回文,双回文 def findh(s):    ## 单回文    ld,l=[],len(s)    if len(s)<3:        re ...