在CSDN写过博客的人可能会使用它提供的“文章中H1到H6标签自动生成文章目录”这个功能。而且这样的文章看起来很醒目,能够快速的定位到自己想看的内容,可以说是深受广大博友的喜爱。那么这样友好的功能是如何实现的呢?且看小编今天为大家揭开它的神秘面纱。
先看看运行效果吧:

整体运行效果看起来,还不错吧!点击此处查看详细运行效果
我先说下实现思路
1.整体目录使用的是ol和li标签实现
2.点击+、-判断是否展开和收起
3.使用a标签实现锚点定位
全部源码点击此处查看
我们今天的重点是如何让你的网站也支持这样的功能。做的思路如下:
1.查找所有的h1,h2,h3,h4,h5,h6标签(排除文章标题)
2.按h1到h6的顺序添加ol和li,并拼接成html,具体做法如下:
所有的h1都作为Tree的1级节点,h2作为上一个h1的子节点,h3作为上一个h2的子节点,以此类推。
3.给对应的节点添加自定义的锚点
4.点击+、-符号,分别执行展开和收起动作
全部代码如下:
$(document).ready(function() {
// :www.xttblog.com
initCatalog();
});
function initCatalog() {
var hs = $('#article').find('h1,h2,h3,h4,h5,h6');
if (hs.length < 2)
return;
var html = '';
html += '<div style="clear:both"></div>';
html += '<div class="xttblog_toc">';
html += '<p style="text-align:right;margin:0;"><span style="float:left;">目录';
html += '<a href="#" title="系统根据文章中H1到H6标签自动生成文章目录">(?)</a></span>';
html += '<a href="#" onclick="javascript:return openct(this);" title="展开">[+]</a></p>';
html += '<ol style="display:none;margin-left:14px;padding-left:14px;line-height:160%;">';
var old_h = 0, ol_cnt = 0;
for (var i = 1; i < hs.length; i++) {
var h_tag = parseInt(hs[i].tagName.substr(1), 10);
if (!old_h)
old_h = h_tag;
if (h_tag > old_h) {
html += '<ol>';
ol_cnt++;
}else if (h_tag < old_h && ol_cnt > 0) {
html += '</ol>';
ol_cnt--;
}
if (h_tag == 1) {
while (ol_cnt > 0) {
html += '</ol>';
ol_cnt--;
}
}
old_h = h_tag;
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) {
html += '<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) {
html += '</ol>';
ol_cnt--;
}
html += '</ol></div>';
html += '<div style="clear:both"><br></div>';
$(html).insertBefore($('#article'));
}
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;
}
感兴趣的网页,可以制作成插件,放到github上!
版权声明:本文为博主原创文章,未经博主允许不得转载。

: » 详解如何实现博文中自动生成文章目录的做法
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/tech/aiops/251153.html