博客园文章生成目录
参考博客
Css
/*生成博客目录的CSS*/
#uprightsideBar{
font-size:12px;
font-family:Arial, Helvetica, sans-serif;
text-align:left;
position:fixed;/*将div的位置固定到距离top:50px,right:0px的位置,这样div就会处在最右边的位置,距离顶部50px*/
top:50px;
right:0px;
width: auto;
height: auto;
}
#sideBarTab{
float:left;
width:30px;
border:1px solid #e5e5e5;
border-right:none;
text-align:center;
background:#ffffff;
}
#sideBarContents{
float:left;
overflow:auto;
overflow-x:hidden;!important;
width:200px;
min-height:108px;
max-height:460px;
border:1px solid #e5e5e5;
border-right:none;
background:#ffffff;
}
#sideBarContents dl{
margin:0;
padding:0;
}
#sideBarContents dt{
margin-top:5px;
margin-left:5px;
}
#sideBarContents dd, dt {
cursor: pointer;
}
#sideBarContents dd:hover, dt:hover {
color:#A7995A;
}
#sideBarContents dd{
margin-left:20px;
}
页首-作用生成右侧目录链接
<script type="text/javascript">
/*
功能:生成博客目录的JS工具
测试:IE8,火狐,google测试通过
孤傲苍狼
2014-5-11
*/
var BlogDirectory = {
/*
获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top)
*/
getElementPosition:function (ele) {
var topPosition = 0;
var leftPosition = 0;
while (ele){
topPosition += ele.offsetTop;
leftPosition += ele.offsetLeft;
ele = ele.offsetParent;
}
return {top:topPosition, left:leftPosition};
},
/*
获取滚动条当前位置
*/
getScrollBarPosition:function () {
var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop;
return scrollBarPosition;
},
/*
移动滚动条,finalPos 为目的位置,internal 为移动速度
*/
moveScrollBar:function(finalpos, interval) {
//若不支持此方法,则退出
if(!window.scrollTo) {
return false;
}
//窗体滚动时,禁用鼠标滚轮
window.onmousewheel = function(){
return false;
};
//清除计时
if (document.body.movement) {
clearTimeout(document.body.movement);
}
var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
var dist = 0;
if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出
window.onmousewheel = function(){
return true;
}
return true;
}
if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离
dist = Math.ceil((finalpos - currentpos)/10);
currentpos += dist;
}
if (currentpos > finalpos) {
dist = Math.ceil((currentpos - finalpos)/10);
currentpos -= dist;
}
var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
window.scrollTo(0, currentpos);//移动窗口
if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出
{
window.onmousewheel = function(){
return true;
}
return true;
}
//进行下一步移动
var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")";
document.body.movement = setTimeout(repeat, interval);
},
htmlDecode:function (text){
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
},
/*
创建博客目录,
id表示包含博文正文的 div 容器的 id,
mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!),
interval 表示移动的速度
*/
createBlogDirectory:function (id, mt, st, interval){
//获取博文正文div容器
var elem = document.getElementById(id);
if(!elem) return false;
//获取div中所有元素结点
var nodes = elem.getElementsByTagName("*");
//创建博客目录的div容器
var divSideBar = document.createElement('DIV');
divSideBar.className = 'uprightsideBar';
divSideBar.setAttribute('id', 'uprightsideBar');
var divSideBarTab = document.createElement('DIV');
divSideBarTab.setAttribute('id', 'sideBarTab');
divSideBar.appendChild(divSideBarTab);
var h2 = document.createElement('H2');
divSideBarTab.appendChild(h2);
var txt = document.createTextNode('目录导航');
h2.appendChild(txt);
var divSideBarContents = document.createElement('DIV');
divSideBarContents.style.display = 'none';
divSideBarContents.setAttribute('id', 'sideBarContents');
divSideBar.appendChild(divSideBarContents);
//创建自定义列表
var dlist = document.createElement("dl");
divSideBarContents.appendChild(dlist);
var num = 0;//统计找到的mt和st
mt = mt.toUpperCase();//转化成大写
st = st.toUpperCase();//转化成大写
//遍历所有元素结点
for(var i=0; i<nodes.length; i++)
{
if(nodes[i].nodeName == mt|| nodes[i].nodeName == st)
{
//获取标题文本
var nodetext = nodes[i].innerHTML.replace(/<\/?[^>]+>/g,"");//innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签
nodetext = nodetext.replace(/ /ig, "");//替换掉所有的
nodetext = BlogDirectory.htmlDecode(nodetext);
//插入锚
nodes[i].setAttribute("id", "blogTitle" + num);
var item;
switch(nodes[i].nodeName)
{
case mt: //若为主标题
item = document.createElement("dt");
break;
case st: //若为子标题
item = document.createElement("dd");
break;
}
//创建锚链接
var itemtext = document.createTextNode(nodetext);
item.appendChild(itemtext);
item.setAttribute("name", num);
item.onclick = function(){ //添加鼠标点击触发函数
var pos = BlogDirectory.getElementPosition(document.getElementById("blogTitle" + this.getAttribute("name")));
if(!BlogDirectory.moveScrollBar(pos.top, interval)) return false;
};
//将自定义表项加入自定义列表中
dlist.appendChild(item);
num++;
}
}
if(num == 0) return false;
/*鼠标进入时的事件处理*/
divSideBarTab.onmouseenter = function(){
divSideBarContents.style.display = 'block';
}
/*鼠标离开时的事件处理*/
divSideBar.onmouseleave = function() {
divSideBarContents.style.display = 'none';
}
document.body.appendChild(divSideBar);
}
};
window.onload=function(){
/*页面加载完成之后生成博客目录*/
BlogDirectory.createBlogDirectory("cnblogs_post_body","h2","h3",20);
}
</script>
页脚html代码
<script language="javascript" type="text/javascript">
// 生成目录索引列表
// ref: http://www.cnblogs.com/wangqiguo/p/4355032.html
// modified by: zzq
function GenerateContentList()
{
var mainContent = $('#cnblogs_post_body');
var h2_list = $('#cnblogs_post_body h2');//如果你的章节标题不是h2,只需要将这里的h2换掉即可
if(mainContent.length < 1)
return;
if(h2_list.length>0)
{
var content = '<a name="_labelTop"></a>';
content += '<div id="navCategory" style="color:#152e97;">';
content += '<p style="font-size:18px;"><b>目录</b></p>';
content += '<ul>';
for(var i=0; i<h2_list.length; i++)
{
var go_to_top = '<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label' + i + '"></a></div>';
$(h2_list[i]).before(go_to_top);
var h3_list = $(h2_list[i]).nextAll("h3");
var li3_content = '';
for(var j=0; j<h3_list.length; j++)
{
var tmp = $(h3_list[j]).prevAll('h2').first();
if(!tmp.is(h2_list[i]))
break;
var li3_anchor = '<a name="_label' + i + '_' + j + '"></a>';
$(h3_list[j]).before(li3_anchor);
li3_content += '<li><a href="#_label' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li>';
}
var li2_content = '';
if(li3_content.length > 0)
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>';
else
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a></li>';
content += li2_content;
}
content += '</ul>';
content += '</div><p> </p>';
content += '<hr style="height:1px;border:none;border-top:1px dashed #0066CC;"/>';
if($('#cnblogs_post_body').length != 0 )
{
$($('#cnblogs_post_body')[0]).prepend(content);
}
}
}
GenerateContentList();
</script>
博客园-秒音天女
[为博客园添加目录的方法总结 - 妙音天女 - 博客园](https://www.cnblogs.com/xuehaoyue/p/6650533.html
<html lang="zh-cn"><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="referrer" content="never">
<meta property="og:description" content="参考链接: 第一种:在正文上方直接添加目录 1. 申请开通js权限 默认是不支持,需要打开博客园后台,进入"设置"标签页,点击"申请开通js权限",并注明用途 如果想加快申请速度,也可以再向官方发个邮">
<meta http-equiv="Cache-Control" content="no-transform">
<meta http-equiv="Cache-Control" content="no-siteapp">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>为博客园添加目录的方法总结 - 妙音天女 - 博客园</title>
<link id="favicon" rel="shortcut icon" href="//common.cnblogs.com/favicon.ico?v=20200522" type="image/x-icon">
<link rel="stylesheet" href="/css/blog-common.min.css?v=7Pwqzj5EBy4dBv4DJNI181rFKP8_OF0hT7jO3o8jAa0">
<link id="MainCss" rel="stylesheet" href="/skins/red_autumnal_leaves/bundle-red_autumnal_leaves.min.css?v=eYry4v2FokppvT7fmPg3DGeBoc4qFOj6-DhKpxeIDUE">
<link type="text/css" rel="stylesheet" href="https://www.cnblogs.com/xuehaoyue/custom.css?v=fwyjZnXOr8U9MHuEBYXiLjG6tzQ=">
<link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="/skins/red_autumnal_leaves/bundle-red_autumnal_leaves-mobile.min.css?v=-9jRKRAEeEtlr5EkSG-LpMBRHz2PN0kolWZ1uU8dFT4">
<link type="application/rss+xml" rel="alternate" href="https://www.cnblogs.com/xuehaoyue/rss">
<link type="application/rsd+xml" rel="EditURI" href="https://www.cnblogs.com/xuehaoyue/rsd.xml">
<link type="application/wlwmanifest+xml" rel="wlwmanifest" href="https://www.cnblogs.com/xuehaoyue/wlwmanifest.xml">
<script async="" src="https://www.google-analytics.com/analytics.js"></script><script>
var currentBlogId = 329862;
var currentBlogApp = 'xuehaoyue';
var cb_enable_mathjax = false;
var isLogined = true;
var isBlogOwner = false;
var skinName = 'red_autumnal_leaves';
var visitorUserId = 'a693a5ff-d75d-452a-4edb-08d5af5cce02';
</script>
<script>
var currentPostDateAdded = '2017-03-31 11:40';
</script>
<script src="https://common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script>
<script src="/js/blog-common.min.js?v=Uo4ymXJm9Uae70e1QiD0VXEYnmJBktRs6o-wOPBmwyQ"></script>
</head>
<body>
<a name="top"></a>
<div id="page_begin_html"><script type="text/javascript">window['__document_write_ajax_callbacks__']['2']();</script><script type="text/javascript">window['__document_write_ajax_callbacks__']['1']();</script></div>
<!--done-->
<div id="home">
<div id="header">
<div id="blogTitle">
<a id="lnkBlogLogo" href="https://www.cnblogs.com/xuehaoyue/"><img id="blogLogo" src="/skins/custom/images/logo.gif" alt="返回主页"></a>
<!--done-->
<h1><a id="Header1_HeaderTitle" class="headermaintitle HeaderMainTitle" href="https://www.cnblogs.com/xuehaoyue/">妙音天女</a>
</h1>
<h2>
</h2>
</div><!--end: blogTitle 博客的标题和副标题 -->
<div id="navigator">
<ul id="navList">
<li><a id="blog_nav_sitehome" class="menu" href="https://www.cnblogs.com/">
博客园</a>
</li>
<li>
<a id="blog_nav_myhome" class="menu" href="https://www.cnblogs.com/xuehaoyue/">
首页</a>
</li>
<li>
<a id="blog_nav_newpost" class="menu" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">
新随笔</a>
</li>
<li>
<a id="blog_nav_contact" class="menu" href="https://msg.cnblogs.com/send/%E5%A6%99%E9%9F%B3%E5%A4%A9%E5%A5%B3">
联系</a></li>
<li>
<a id="blog_nav_rss" class="menu" href="javascript:void(0)" data-rss="https://www.cnblogs.com/xuehaoyue/rss/">订阅</a>
<!--<partial name="./Shared/_XmlLink.cshtml" model="Model" /></li>--></li>
<li>
<a id="blog_nav_admin" class="menu" href="https://i.cnblogs.com/">
管理</a>
</li>
</ul>
<div class="blogStats">
<span id="stats_post_count">随笔 -
40 </span>
<span id="stats_article_count">文章 -
1 </span>
<span id="stats-comment_count">评论 -
59</span>
</div><!--end: blogStats -->
</div><!--end: navigator 博客导航栏 -->
</div><!--end: header 头部 -->
<div id="main">
<div id="mainContent">
<div class="forFlow">
<div id="post_detail">
<!--done-->
<div id="topics">
<div class="post">
<h1 class="postTitle">
<a id="cb_post_title_url" class="postTitle2 vertical-middle" href="https://www.cnblogs.com/xuehaoyue/p/6650533.html">
<span>为博客园添加目录的方法总结</span>
</a>
</h1>
<div class="clear"></div>
<div class="postBody">
<div id="cnblogs_post_body" class="blogpost-body cnblogs-markdown"><a name="_labelTop"></a><div id="navCategory" style="color:#152e97;"><p style="font-size:18px;"><b>目录</b></p><ul><li><a href="#_label0">第一种:在正文上方直接添加目录</a><ul><li><a href="#_label0_0">1. 申请开通js权限</a></li><li><a href="#_label0_1">2. 添加js脚本到"页脚Html代码"</a></li><li><a href="#_label0_2">3. 按格式写文章</a></li></ul></li><li><a href="#_label1">第二种:在文章右上角添加目录导航</a><ul><li><a href="#_label1_0">1. 申请开通js权限</a></li><li><a href="#_label1_1">2. 添加css代码到"页面定制CSS代码"</a></li><li><a href="#_label1_2">3. 添加js脚本到"页首Html代码"</a></li><li><a href="#_label1_3">4. 按格式写文章</a></li></ul></li></ul></div><p> </p><hr style="height:1px;border:none;border-top:1px dashed #0066CC;">
<p>参考链接:<br>
<a href="http://www.cnblogs.com/xdp-gacl/p/3718879.html#2937655">http://www.cnblogs.com/xdp-gacl/p/3718879.html#2937655</a><br>
<a href="http://www.cnblogs.com/zzqcn/p/4657124.html">http://www.cnblogs.com/zzqcn/p/4657124.html</a><br>
<a href="http://www.cnblogs.com/jiangz/p/3734968.html">http://www.cnblogs.com/jiangz/p/3734968.html</a></p>
<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label0"></a></div><h2 id="blogTitle0">第一种:在正文上方直接添加目录</h2>
<a name="_label0_0"></a><h3 id="blogTitle1">1. 申请开通js权限</h3>
<p>默认是不支持,需要打开博客园后台,进入"设置"标签页,点击"申请开通js权限",并注明用途<br>
<img src="//upload-images.jianshu.io/upload_images/4334050-29d472bc4b493c49.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Paste_Image.png" loading="lazy"><br>
如果想加快申请速度,也可以再向官方发个邮件(邮箱是<a href="mailto:contact@cnblogs.com">contact@cnblogs.com</a>),邮件也需要注明用途,快的话1小时就能搞定了</p>
<a name="_label0_1"></a><h3 id="blogTitle2">2. 添加js脚本到"页脚Html代码"</h3>
<p>打开博客园后台,进入"设置"标签页,在最下面的"页脚Html代码"对应的编辑框粘贴下面的js代码,然后点"保存"按钮保存。<br>
(如果没有开通js权限,此处无法添加)<br>
<img src="//upload-images.jianshu.io/upload_images/4334050-6cf216b26ad8be06.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Paste_Image.png" loading="lazy"></p>
<p><img src="//upload-images.jianshu.io/upload_images/4334050-4d54307e03714fa2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Paste_Image.png" loading="lazy"></p>
<pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">language</span>=<span class="hljs-string">"javascript"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span>></span><span class="javascript">
<span class="hljs-comment">// 生成目录索引列表</span>
<span class="hljs-comment">// ref: http://www.cnblogs.com/wangqiguo/p/4355032.html</span>
<span class="hljs-comment">// modified by: zzq</span>
<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">GenerateContentList</span>(<span class="hljs-params"></span>)
</span>{
<span class="hljs-keyword">var</span> mainContent = $(<span class="hljs-string">'#cnblogs_post_body'</span>);
<span class="hljs-keyword">var</span> h2_list = $(<span class="hljs-string">'#cnblogs_post_body h2'</span>);<span class="hljs-comment">//如果你的章节标题不是h2,只需要将这里的h2换掉即可</span>
<span class="hljs-keyword">if</span>(mainContent.length < <span class="hljs-number">1</span>)
<span class="hljs-keyword">return</span>;
<span class="hljs-keyword">if</span>(h2_list.length><span class="hljs-number">0</span>)
{
<span class="hljs-keyword">var</span> content = <span class="hljs-string">'<a name="_labelTop"></a>'</span>;
content += <span class="hljs-string">'<div id="navCategory" style="color:#152e97;">'</span>;
content += <span class="hljs-string">'<p style="font-size:18px;"><b>目录</b></p>'</span>;
content += <span class="hljs-string">'<ul>'</span>;
<span class="hljs-keyword">for</span>(<span class="hljs-keyword">var</span> i=<span class="hljs-number">0</span>; i<h2_list.length; i++)
{
<span class="hljs-keyword">var</span> go_to_top = <span class="hljs-string">'<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label'</span> + i + <span class="hljs-string">'"></a></div>'</span>;
$(h2_list[i]).before(go_to_top);
<span class="hljs-keyword">var</span> h3_list = $(h2_list[i]).nextAll(<span class="hljs-string">"h3"</span>);
<span class="hljs-keyword">var</span> li3_content = <span class="hljs-string">''</span>;
<span class="hljs-keyword">for</span>(<span class="hljs-keyword">var</span> j=<span class="hljs-number">0</span>; j<h3_list.length; j++)
{
<span class="hljs-keyword">var</span> tmp = $(h3_list[j]).prevAll(<span class="hljs-string">'h2'</span>).first();
<span class="hljs-keyword">if</span>(!tmp.is(h2_list[i]))
<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">var</span> li3_anchor = <span class="hljs-string">'<a name="_label'</span> + i + <span class="hljs-string">'_'</span> + j + <span class="hljs-string">'"></a>'</span>;
$(h3_list[j]).before(li3_anchor);
li3_content += <span class="hljs-string">'<li><a href="#_label'</span> + i + <span class="hljs-string">'_'</span> + j + <span class="hljs-string">'">'</span> + $(h3_list[j]).text() + <span class="hljs-string">'</a></li>'</span>;
}
<span class="hljs-keyword">var</span> li2_content = <span class="hljs-string">''</span>;
<span class="hljs-keyword">if</span>(li3_content.length > <span class="hljs-number">0</span>)
li2_content = <span class="hljs-string">'<li><a href="#_label'</span> + i + <span class="hljs-string">'">'</span> + $(h2_list[i]).text() + <span class="hljs-string">'</a><ul>'</span> + li3_content + <span class="hljs-string">'</ul></li>'</span>;
<span class="hljs-keyword">else</span>
li2_content = <span class="hljs-string">'<li><a href="#_label'</span> + i + <span class="hljs-string">'">'</span> + $(h2_list[i]).text() + <span class="hljs-string">'</a></li>'</span>;
content += li2_content;
}
content += <span class="hljs-string">'</ul>'</span>;
content += <span class="hljs-string">'</div><p>&nbsp;</p>'</span>;
content += <span class="hljs-string">'<hr style="height:1px;border:none;border-top:1px dashed #0066CC;"/>'</span>;
<span class="hljs-keyword">if</span>($(<span class="hljs-string">'#cnblogs_post_body'</span>).length != <span class="hljs-number">0</span> )
{
$($(<span class="hljs-string">'#cnblogs_post_body'</span>)[<span class="hljs-number">0</span>]).prepend(content);
}
}
}
GenerateContentList();
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></pre>
<a name="_label0_2"></a><h3 id="blogTitle3">3. 按格式写文章</h3>
<p>在写新博文的时候,注意按照你js脚本里设定的格式来划分章节(这里只设定了h2,h3,对应普通编辑器中的二级标题和三级标题,对应markdown中的##和###)。当然,以前发布的文章如果有h2,h3,也会自动生成目录索引。<br>
<br><br>
效果如下:<br>
<img src="//upload-images.jianshu.io/upload_images/4334050-85f26e605ba11f1b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Paste_Image.png" loading="lazy"></p>
<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label1"></a></div><h2 id="blogTitle4">第二种:在文章右上角添加目录导航</h2>
<a name="_label1_0"></a><h3 id="blogTitle5">1. 申请开通js权限</h3>
<p>同上</p>
<a name="_label1_1"></a><h3 id="blogTitle6">2. 添加css代码到"页面定制CSS代码"</h3>
<p><img src="//upload-images.jianshu.io/upload_images/4334050-66323d1d5ca908a2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Paste_Image.png" loading="lazy"></p>
<pre><code class="hljs scss"><span class="hljs-comment">/*生成博客目录的CSS*/</span>
<span class="hljs-selector-id">#uprightsideBar</span>{
<span class="hljs-attribute">font-size</span>:<span class="hljs-number">12px</span>;
<span class="hljs-attribute">font-family</span>:Arial, Helvetica, sans-serif;
<span class="hljs-attribute">text-align</span>:left;
<span class="hljs-attribute">position</span>:fixed;<span class="hljs-comment">/*将div的位置固定到距离top:50px,right:0px的位置,这样div就会处在最右边的位置,距离顶部50px*/</span>
<span class="hljs-attribute">top</span>:<span class="hljs-number">50px</span>;
<span class="hljs-attribute">right</span>:<span class="hljs-number">0px</span>;
<span class="hljs-attribute">width</span>: auto;
<span class="hljs-attribute">height</span>: auto;
}
<span class="hljs-selector-id">#sideBarTab</span>{
<span class="hljs-attribute">float</span>:left;
<span class="hljs-attribute">width</span>:<span class="hljs-number">30px</span>;
<span class="hljs-attribute">border</span>:<span class="hljs-number">1px</span> solid <span class="hljs-number">#e5e5e5</span>;
<span class="hljs-attribute">border-right</span>:none;
<span class="hljs-attribute">text-align</span>:center;
<span class="hljs-attribute">background</span>:<span class="hljs-number">#ffffff</span>;
}
<span class="hljs-selector-id">#sideBarContents</span>{
<span class="hljs-attribute">float</span>:left;
<span class="hljs-attribute">overflow</span>:auto;
<span class="hljs-attribute">overflow-x</span>:hidden;!important;
<span class="hljs-attribute">width</span>:<span class="hljs-number">200px</span>;
<span class="hljs-attribute">min-height</span>:<span class="hljs-number">108px</span>;
<span class="hljs-attribute">max-height</span>:<span class="hljs-number">460px</span>;
<span class="hljs-attribute">border</span>:<span class="hljs-number">1px</span> solid <span class="hljs-number">#e5e5e5</span>;
<span class="hljs-attribute">border-right</span>:none;
<span class="hljs-attribute">background</span>:<span class="hljs-number">#ffffff</span>;
}
<span class="hljs-selector-id">#sideBarContents</span> <span class="hljs-selector-tag">dl</span>{
<span class="hljs-attribute">margin</span>:<span class="hljs-number">0</span>;
<span class="hljs-attribute">padding</span>:<span class="hljs-number">0</span>;
}
<span class="hljs-selector-id">#sideBarContents</span> <span class="hljs-selector-tag">dt</span>{
<span class="hljs-attribute">margin-top</span>:<span class="hljs-number">5px</span>;
<span class="hljs-attribute">margin-left</span>:<span class="hljs-number">5px</span>;
}
<span class="hljs-selector-id">#sideBarContents</span> <span class="hljs-selector-tag">dd</span>, <span class="hljs-selector-tag">dt</span> {
<span class="hljs-attribute">cursor</span>: pointer;
}
<span class="hljs-selector-id">#sideBarContents</span> <span class="hljs-selector-tag">dd</span>:hover, <span class="hljs-selector-tag">dt</span>:hover {
<span class="hljs-attribute">color</span>:<span class="hljs-number">#A7995A</span>;
}
<span class="hljs-selector-id">#sideBarContents</span> <span class="hljs-selector-tag">dd</span>{
<span class="hljs-attribute">margin-left</span>:<span class="hljs-number">20px</span>;
}
</code></pre>
<a name="_label1_2"></a><h3 id="blogTitle7">3. 添加js脚本到"页首Html代码"</h3>
<p><img src="//upload-images.jianshu.io/upload_images/4334050-118df2570a63de6c.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Paste_Image.png" loading="lazy"></p>
<pre><code class="hljs xml"><span class="hljs-tag"><<span class="hljs-name">script</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/javascript"</span>></span><span class="javascript">
<span class="hljs-comment">/*
功能:生成博客目录的JS工具
测试:IE8,火狐,google测试通过
孤傲苍狼
2014-5-11
*/</span>
<span class="hljs-keyword">var</span> BlogDirectory = {
<span class="hljs-comment">/*
获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top)
*/</span>
getElementPosition:<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">ele</span>) </span>{
<span class="hljs-keyword">var</span> topPosition = <span class="hljs-number">0</span>;
<span class="hljs-keyword">var</span> leftPosition = <span class="hljs-number">0</span>;
<span class="hljs-keyword">while</span> (ele){
topPosition += ele.offsetTop;
leftPosition += ele.offsetLeft;
ele = ele.offsetParent;
}
<span class="hljs-keyword">return</span> {<span class="hljs-attr">top</span>:topPosition, <span class="hljs-attr">left</span>:leftPosition};
},
<span class="hljs-comment">/*
获取滚动条当前位置
*/</span>
getScrollBarPosition:<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params"></span>) </span>{
<span class="hljs-keyword">var</span> scrollBarPosition = <span class="hljs-built_in">document</span>.body.scrollTop || <span class="hljs-built_in">document</span>.documentElement.scrollTop;
<span class="hljs-keyword">return</span> scrollBarPosition;
},
<span class="hljs-comment">/*
移动滚动条,finalPos 为目的位置,internal 为移动速度
*/</span>
moveScrollBar:<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params">finalpos, interval</span>) </span>{
<span class="hljs-comment">//若不支持此方法,则退出</span>
<span class="hljs-keyword">if</span>(!<span class="hljs-built_in">window</span>.scrollTo) {
<span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
}
<span class="hljs-comment">//窗体滚动时,禁用鼠标滚轮</span>
<span class="hljs-built_in">window</span>.onmousewheel = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
<span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
};
<span class="hljs-comment">//清除计时</span>
<span class="hljs-keyword">if</span> (<span class="hljs-built_in">document</span>.body.movement) {
clearTimeout(<span class="hljs-built_in">document</span>.body.movement);
}
<span class="hljs-keyword">var</span> currentpos =BlogDirectory.getScrollBarPosition();<span class="hljs-comment">//获取滚动条当前位置</span>
<span class="hljs-keyword">var</span> dist = <span class="hljs-number">0</span>;
<span class="hljs-keyword">if</span> (currentpos == finalpos) {<span class="hljs-comment">//到达预定位置,则解禁鼠标滚轮,并退出</span>
<span class="hljs-built_in">window</span>.onmousewheel = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
<span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}
<span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}
<span class="hljs-keyword">if</span> (currentpos < finalpos) {<span class="hljs-comment">//未到达,则计算下一步所要移动的距离</span>
dist = <span class="hljs-built_in">Math</span>.ceil((finalpos - currentpos)/<span class="hljs-number">10</span>);
currentpos += dist;
}
<span class="hljs-keyword">if</span> (currentpos > finalpos) {
dist = <span class="hljs-built_in">Math</span>.ceil((currentpos - finalpos)/<span class="hljs-number">10</span>);
currentpos -= dist;
}
<span class="hljs-keyword">var</span> scrTop = BlogDirectory.getScrollBarPosition();<span class="hljs-comment">//获取滚动条当前位置</span>
<span class="hljs-built_in">window</span>.scrollTo(<span class="hljs-number">0</span>, currentpos);<span class="hljs-comment">//移动窗口</span>
<span class="hljs-keyword">if</span>(BlogDirectory.getScrollBarPosition() == scrTop)<span class="hljs-comment">//若已到底部,则解禁鼠标滚轮,并退出</span>
{
<span class="hljs-built_in">window</span>.onmousewheel = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
<span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}
<span class="hljs-keyword">return</span> <span class="hljs-literal">true</span>;
}
<span class="hljs-comment">//进行下一步移动</span>
<span class="hljs-keyword">var</span> repeat = <span class="hljs-string">"BlogDirectory.moveScrollBar("</span> + finalpos + <span class="hljs-string">","</span> + interval + <span class="hljs-string">")"</span>;
<span class="hljs-built_in">document</span>.body.movement = setTimeout(repeat, interval);
},
<span class="hljs-attr">htmlDecode</span>:<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">text</span>)</span>{
<span class="hljs-keyword">var</span> temp = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"div"</span>);
temp.innerHTML = text;
<span class="hljs-keyword">var</span> output = temp.innerText || temp.textContent;
temp = <span class="hljs-literal">null</span>;
<span class="hljs-keyword">return</span> output;
},
<span class="hljs-comment">/*
创建博客目录,
id表示包含博文正文的 div 容器的 id,
mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!),
interval 表示移动的速度
*/</span>
createBlogDirectory:<span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">id, mt, st, interval</span>)</span>{
<span class="hljs-comment">//获取博文正文div容器</span>
<span class="hljs-keyword">var</span> elem = <span class="hljs-built_in">document</span>.getElementById(id);
<span class="hljs-keyword">if</span>(!elem) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
<span class="hljs-comment">//获取div中所有元素结点</span>
<span class="hljs-keyword">var</span> nodes = elem.getElementsByTagName(<span class="hljs-string">"*"</span>);
<span class="hljs-comment">//创建博客目录的div容器</span>
<span class="hljs-keyword">var</span> divSideBar = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">'DIV'</span>);
divSideBar.className = <span class="hljs-string">'uprightsideBar'</span>;
divSideBar.setAttribute(<span class="hljs-string">'id'</span>, <span class="hljs-string">'uprightsideBar'</span>);
<span class="hljs-keyword">var</span> divSideBarTab = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">'DIV'</span>);
divSideBarTab.setAttribute(<span class="hljs-string">'id'</span>, <span class="hljs-string">'sideBarTab'</span>);
divSideBar.appendChild(divSideBarTab);
<span class="hljs-keyword">var</span> h2 = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">'H2'</span>);
divSideBarTab.appendChild(h2);
<span class="hljs-keyword">var</span> txt = <span class="hljs-built_in">document</span>.createTextNode(<span class="hljs-string">'目录导航'</span>);
h2.appendChild(txt);
<span class="hljs-keyword">var</span> divSideBarContents = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">'DIV'</span>);
divSideBarContents.style.display = <span class="hljs-string">'none'</span>;
divSideBarContents.setAttribute(<span class="hljs-string">'id'</span>, <span class="hljs-string">'sideBarContents'</span>);
divSideBar.appendChild(divSideBarContents);
<span class="hljs-comment">//创建自定义列表</span>
<span class="hljs-keyword">var</span> dlist = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"dl"</span>);
divSideBarContents.appendChild(dlist);
<span class="hljs-keyword">var</span> num = <span class="hljs-number">0</span>;<span class="hljs-comment">//统计找到的mt和st</span>
mt = mt.toUpperCase();<span class="hljs-comment">//转化成大写</span>
st = st.toUpperCase();<span class="hljs-comment">//转化成大写</span>
<span class="hljs-comment">//遍历所有元素结点</span>
<span class="hljs-keyword">for</span>(<span class="hljs-keyword">var</span> i=<span class="hljs-number">0</span>; i<nodes.length; i++)
{
<span class="hljs-keyword">if</span>(nodes[i].nodeName == mt|| nodes[i].nodeName == st)
{
<span class="hljs-comment">//获取标题文本</span>
<span class="hljs-keyword">var</span> nodetext = nodes[i].innerHTML.replace(<span class="hljs-regexp">/<\/?[^>]+>/g</span>,<span class="hljs-string">""</span>);<span class="hljs-comment">//innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签</span>
nodetext = nodetext.replace(<span class="hljs-regexp">/ /ig</span>, <span class="hljs-string">""</span>);<span class="hljs-comment">//替换掉所有的 </span>
nodetext = BlogDirectory.htmlDecode(nodetext);
<span class="hljs-comment">//插入锚 </span>
nodes[i].setAttribute(<span class="hljs-string">"id"</span>, <span class="hljs-string">"blogTitle"</span> + num);
<span class="hljs-keyword">var</span> item;
<span class="hljs-keyword">switch</span>(nodes[i].nodeName)
{
<span class="hljs-keyword">case</span> mt: <span class="hljs-comment">//若为主标题 </span>
item = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"dt"</span>);
<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> st: <span class="hljs-comment">//若为子标题</span>
item = <span class="hljs-built_in">document</span>.createElement(<span class="hljs-string">"dd"</span>);
<span class="hljs-keyword">break</span>;
}
<span class="hljs-comment">//创建锚链接</span>
<span class="hljs-keyword">var</span> itemtext = <span class="hljs-built_in">document</span>.createTextNode(nodetext);
item.appendChild(itemtext);
item.setAttribute(<span class="hljs-string">"name"</span>, num);
item.onclick = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{ <span class="hljs-comment">//添加鼠标点击触发函数</span>
<span class="hljs-keyword">var</span> pos = BlogDirectory.getElementPosition(<span class="hljs-built_in">document</span>.getElementById(<span class="hljs-string">"blogTitle"</span> + <span class="hljs-keyword">this</span>.getAttribute(<span class="hljs-string">"name"</span>)));
<span class="hljs-keyword">if</span>(!BlogDirectory.moveScrollBar(pos.top, interval)) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
};
<span class="hljs-comment">//将自定义表项加入自定义列表中</span>
dlist.appendChild(item);
num++;
}
}
<span class="hljs-keyword">if</span>(num == <span class="hljs-number">0</span>) <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span>;
<span class="hljs-comment">/*鼠标进入时的事件处理*/</span>
divSideBarTab.onmouseenter = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
divSideBarContents.style.display = <span class="hljs-string">'block'</span>;
}
<span class="hljs-comment">/*鼠标离开时的事件处理*/</span>
divSideBar.onmouseleave = <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
divSideBarContents.style.display = <span class="hljs-string">'none'</span>;
}
<span class="hljs-built_in">document</span>.body.appendChild(divSideBar);
}
};
<span class="hljs-built_in">window</span>.onload=<span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>)</span>{
<span class="hljs-comment">/*页面加载完成之后生成博客目录*/</span>
BlogDirectory.createBlogDirectory(<span class="hljs-string">"cnblogs_post_body"</span>,<span class="hljs-string">"h2"</span>,<span class="hljs-string">"h3"</span>,<span class="hljs-number">20</span>);
}
</span><span class="hljs-tag"></<span class="hljs-name">script</span>></span>
</code></pre>
<a name="_label1_3"></a><h3 id="blogTitle8">4. 按格式写文章</h3>
<p>同上<br>
<br><br>
效果如下:<br>
<img src="//upload-images.jianshu.io/upload_images/4334050-9dac637b2930256f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240" alt="Paste_Image.png" loading="lazy"></p>
</div>
<div id="MySignature"></div>
<div class="clear"></div>
<div id="blog_post_info_block"><div id="BlogPostCategory">
分类:
<a href="https://www.cnblogs.com/xuehaoyue/category/972472.html" target="_blank">工具</a></div>
<div id="blog_post_info">
<div id="green_channel">
<a href="javascript:void(0);" id="green_channel_digg" onclick="DiggIt(6650533,cb_blogId,1);green_channel_success(this,'谢谢推荐!');">好文要顶</a>
<a id="green_channel_follow" onclick="follow('fdceac23-09e7-e611-845c-ac853d9f53ac');" href="javascript:void(0);">关注我</a>
<a id="green_channel_favorite" onclick="AddToWz(cb_entryId);return false;" href="javascript:void(0);">收藏该文</a>
<a id="green_channel_weibo" href="javascript:void(0);" title="分享至新浪微博" onclick="ShareToTsina()"><img src="https://common.cnblogs.com/images/icon_weibo_24.png" alt=""></a>
<a id="green_channel_wechat" href="javascript:void(0);" title="分享至微信" onclick="shareOnWechat()"><img src="https://common.cnblogs.com/images/wechat.png" alt=""></a>
</div>
<div id="author_profile">
<div id="author_profile_info" class="author_profile_info">
<a href="https://home.cnblogs.com/u/xuehaoyue/" target="_blank"><img src="https://pic.cnblogs.com/face/1100067/20170314194013.png" class="author_avatar" alt=""></a>
<div id="author_profile_detail" class="author_profile_info">
<a href="https://home.cnblogs.com/u/xuehaoyue/">妙音天女</a><br>
<a href="https://home.cnblogs.com/u/xuehaoyue/followees/">关注 - 2</a><br>
<a href="https://home.cnblogs.com/u/xuehaoyue/followers/">粉丝 - 30</a>
</div>
</div>
<div class="clear"></div>
<div id="author_profile_honor"></div>
<div id="author_profile_follow">
<a href="javascript:void(0);" onclick="follow('fdceac23-09e7-e611-845c-ac853d9f53ac');return false;">+加关注</a>
</div>
</div>
<div id="div_digg">
<div class="diggit" onclick="votePost(6650533,'Digg')">
<span class="diggnum" id="digg_count">24</span>
</div>
<div class="buryit" onclick="votePost(6650533,'Bury')">
<span class="burynum" id="bury_count">0</span>
</div>
<div class="clear"></div>
<div class="diggword" id="digg_tips">
</div>
</div>
<script type="text/javascript">
currentDiggType = 0;
</script></div>
<div class="clear"></div>
<div id="post_next_prev">
<a href="https://www.cnblogs.com/xuehaoyue/p/6639029.html" class="p_n_p_prefix">« </a> 上一篇: <a href="https://www.cnblogs.com/xuehaoyue/p/6639029.html" title="发布于 2017-03-29 11:47">分块编码(Transfer-Encoding: chunked)</a>
<br>
<a href="https://www.cnblogs.com/xuehaoyue/p/6652900.html" class="p_n_p_prefix">» </a> 下一篇: <a href="https://www.cnblogs.com/xuehaoyue/p/6652900.html" title="发布于 2017-03-31 18:56">动态规划(一):矩阵取数问题</a>
</div>
</div>
</div>
<div class="postDesc">posted @
<span id="post-date">2017-03-31 11:40</span>
<a href="https://www.cnblogs.com/xuehaoyue/">妙音天女</a>
阅读(<span id="post_view_count">6114</span>)
评论(<span id="post_comment_count">14</span>)
<a href="https://i.cnblogs.com/EditPosts.aspx?postid=6650533" rel="nofollow">编辑</a>
<a href="javascript:void(0)" onclick="AddToWz(6650533);return false;">收藏</a></div>
</div>
</div><!--end: topics 文章、评论容器-->
</div>
<script src="https://common.cnblogs.com/highlight/9.12.0/highlight.min.js"></script>
<script>markdown_highlight();</script>
<script>
var allowComments = true, cb_blogId = 329862, cb_blogApp = 'xuehaoyue', cb_blogUserGuid = 'fdceac23-09e7-e611-845c-ac853d9f53ac';
var cb_entryId = 6650533, cb_entryCreatedDate = '2017-03-31 11:40', cb_postType = 1;
loadViewCount(cb_entryId);
loadSideColumnAd();
</script><a name="!comments"></a>
<div id="blog-comments-placeholder">
<div id="comment_pager_top">
</div>
<br>
<div class="feedback_area_title">评论列表</div>
<div class="feedbackNoItems">
<div class="feedbackNoItems"></div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(3895543, 'k6LWhkwCnVgkKJLlmmdekSBduh4Q7h5tRzGCfaVfjlVq/EzrPQK36Q==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(3895543, 'k6LWhkwCnVgkKJLlmmdekSBduh4Q7h5tRzGCfaVfjlVq/EzrPQK36Q==')">
引用
</a>
</span>
</div>
<a href="#3895543" class="layer">#1楼</a>
<a name="3895543" id="comment_anchor_3895543"></a>
<span class="comment_date">2018-01-23 11:09</span>
<a id="a_comment_author_3895543" href="https://www.cnblogs.com/mukekeheart/" target="_blank">mukekeheart</a>
</div>
<div class="feedbackCon">
<div id="comment_body_3895543" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
请问下如何设置字体大小呢
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3895543, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(3895543, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_3895543_avatar" style="display:none">
https://pic.cnblogs.com/face/926487/20180313105754.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(3900552, 'ntXUPlsiMzyfJn0uJlJpe8jcdgT0BqMpK6FW4kWw5dqRl5G1EwPsqg==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(3900552, 'ntXUPlsiMzyfJn0uJlJpe8jcdgT0BqMpK6FW4kWw5dqRl5G1EwPsqg==')">
引用
</a>
</span>
</div>
<a href="#3900552" class="layer">#2楼</a>
<a name="3900552" id="comment_anchor_3900552"></a>
<span class="comment_date">2018-01-30 17:47</span>
<a id="a_comment_author_3900552" href="https://www.cnblogs.com/houhaibushihai/" target="_blank">houhaibushihai</a>
</div>
<div class="feedbackCon">
<div id="comment_body_3900552" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
首先感谢🙏博主的分享!不过遇到点儿问题:<br>1.目录中的单词间没有空格符,很不便于阅读目录。<img src="//images2017.cnblogs.com/blog/605033/201801/605033-20180130174558593-1118627616.png" alt="" border="0" "=""><br>2.怎么增加多级标题?我是用markdown编辑文件,使用的目录级数比较多。
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3900552, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(3900552, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_3900552_avatar" style="display:none">
https://pic.cnblogs.com/face/605033/20181215204618.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(3944601, 'J4bB6jYee3EvJufClVkJamGLq6INJWFRAqzbnLcWoaqCwvaHznQbPQ==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(3944601, 'J4bB6jYee3EvJufClVkJamGLq6INJWFRAqzbnLcWoaqCwvaHznQbPQ==')">
引用
</a>
</span>
</div>
<a href="#3944601" class="layer">#3楼</a>
<a name="3944601" id="comment_anchor_3944601"></a>
<span class="comment_date">2018-04-08 08:36</span>
<a id="a_comment_author_3944601" href="https://www.cnblogs.com/fqh202/" target="_blank">方淇韩FrankFang</a>
</div>
<div class="feedbackCon">
<div id="comment_body_3944601" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
多谢!
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(3944601, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(3944601, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_3944601_avatar" style="display:none">
https://pic.cnblogs.com/face/1304861/20191114115633.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4042055, 'NufxBGZ2OJAaecfyxL8IgehTSuP+IIUqdeWETwfXQO9cxK5AjJN2WQ==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4042055, 'NufxBGZ2OJAaecfyxL8IgehTSuP+IIUqdeWETwfXQO9cxK5AjJN2WQ==')">
引用
</a>
</span>
</div>
<a href="#4042055" class="layer">#4楼</a>
<a name="4042055" id="comment_anchor_4042055"></a>
<span class="comment_date">2018-08-13 18:09</span>
<a id="a_comment_author_4042055" href="https://www.cnblogs.com/mylinuxroad/" target="_blank">景略</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4042055" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
好难哦 小白表示这么麻烦呀
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4042055, 'Digg', this.parentElement, false);">
支持(1)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4042055, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_4042055_avatar" style="display:none">
https://pic.cnblogs.com/face/1460190/20180807221402.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4059876, '597zLB4zeFMwALJWq110ltkDbC/lnbMi6+fKU8NgF6N8FJqPNzfxyA==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4059876, '597zLB4zeFMwALJWq110ltkDbC/lnbMi6+fKU8NgF6N8FJqPNzfxyA==')">
引用
</a>
</span>
</div>
<a href="#4059876" class="layer">#5楼</a>
<a name="4059876" id="comment_anchor_4059876"></a>
<span class="comment_date">2018-09-06 15:36</span>
<a id="a_comment_author_4059876" href="https://www.cnblogs.com/qf123/" target="_blank">*青锋*</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4059876" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
感谢
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4059876, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4059876, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_4059876_avatar" style="display:none">
https://pic.cnblogs.com/face/1060173/20180228104318.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4161676, 'imeMjnw13avKVqQhrUz5PD304TkPh4YSruAvU5x9GcCjrrhNV4dnXg==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4161676, 'imeMjnw13avKVqQhrUz5PD304TkPh4YSruAvU5x9GcCjrrhNV4dnXg==')">
引用
</a>
</span>
</div>
<a href="#4161676" class="layer">#6楼</a>
<a name="4161676" id="comment_anchor_4161676"></a>
<span class="comment_date">2019-01-13 10:22</span>
<a id="a_comment_author_4161676" href="https://www.cnblogs.com/lart/" target="_blank">lart</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4161676" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
可以的, 很不错, 感谢
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4161676, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4161676, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_4161676_avatar" style="display:none">
https://pic.cnblogs.com/face/1094855/20190912095625.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4183551, 'HmAx5E0KxqFLmtHDrwrMjqKmo2J97fEojgxN2hQOjzkIM7UYSejZZQ==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4183551, 'HmAx5E0KxqFLmtHDrwrMjqKmo2J97fEojgxN2hQOjzkIM7UYSejZZQ==')">
引用
</a>
</span>
</div>
<a href="#4183551" class="layer">#7楼</a>
<a name="4183551" id="comment_anchor_4183551"></a>
<span class="comment_date">2019-02-20 00:03</span>
<a id="a_comment_author_4183551" href="https://www.cnblogs.com/machangwei-8/" target="_blank">马昌伟</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4183551" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
good
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4183551, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4183551, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4186066, 'HmAx5E0KxqFLmtHDrwrMjqKmo2J97fEojgxN2hQOjzkIM7UYSejZZQ==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4186066, 'HmAx5E0KxqFLmtHDrwrMjqKmo2J97fEojgxN2hQOjzkIM7UYSejZZQ==')">
引用
</a>
</span>
</div>
<a href="#4186066" class="layer">#8楼</a>
<a name="4186066" id="comment_anchor_4186066"></a>
<span class="comment_date">2019-02-23 00:42</span>
<a id="a_comment_author_4186066" href="https://www.cnblogs.com/machangwei-8/" target="_blank">马昌伟</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4186066" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
右上角的目录导航怎么突然不能用了呢????
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4186066, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4186066, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4299628, 'LhvTyHHfCqEJ6psUgqHt7XkjFJjLiZTDYcik7y0D1nkcdGfKQ76GFg==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4299628, 'LhvTyHHfCqEJ6psUgqHt7XkjFJjLiZTDYcik7y0D1nkcdGfKQ76GFg==')">
引用
</a>
</span>
</div>
<a href="#4299628" class="layer">#9楼</a>
<a name="4299628" id="comment_anchor_4299628"></a>
<span class="comment_date">2019-07-13 13:43</span>
<a id="a_comment_author_4299628" href="https://www.cnblogs.com/yang-biji/" target="_blank">四月二十二</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4299628" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
博客园的背景有毒,我使用这个方法的时候,没有显示成功,审查元素的时候发现,这个右上角的目录框是存在的,但是被背景盖住了,所以没有显示<br>我一开始用的是一个水墨的那个,现在换成这篇博客一样的背景了,现在能显示了
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4299628, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4299628, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4396722, '7fDK5COJxLq5l7q3xfYLg3ktnzDCz1HY0zAQBu30fWJVdRq6COVxNA==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4396722, '7fDK5COJxLq5l7q3xfYLg3ktnzDCz1HY0zAQBu30fWJVdRq6COVxNA==')">
引用
</a>
</span>
</div>
<a href="#4396722" class="layer">#10楼</a>
<a name="4396722" id="comment_anchor_4396722"></a>
<span class="comment_date">2019-10-19 14:45</span>
<a id="a_comment_author_4396722" href="https://www.cnblogs.com/dhs94/" target="_blank">dhs94</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4396722" data-format-type="Ubb" class="blog_comment_body cnblogs-ubb">
我想在加一级怎么办呢
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4396722, 'Digg', this.parentElement, false);">
支持(1)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4396722, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_4396722_avatar" style="display:none">
https://pic.cnblogs.com/face/1351857/20190529113516.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4538303, '+FOueJYAdmRHWH+CXro1jlSNEF8cBLrAyXUFxC5VGyEN/7c/946Y/Q==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4538303, '+FOueJYAdmRHWH+CXro1jlSNEF8cBLrAyXUFxC5VGyEN/7c/946Y/Q==')">
引用
</a>
</span>
</div>
<a href="#4538303" class="layer">#11楼</a>
<a name="4538303" id="comment_anchor_4538303"></a>
<span class="comment_date">2020-04-01 00:12</span>
<a id="a_comment_author_4538303" href="https://www.cnblogs.com/pam-sh/" target="_blank">Pam/sh</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4538303" data-format-type="Markdown" class="blog_comment_body cnblogs-markdown">
<p>请问老哥如何实现目录瞬间跳转?这样跳转时间太慢了</p>
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4538303, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4538303, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_4538303_avatar" style="display:none">
https://pic.cnblogs.com/face/1928790/20200712181005.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4541228, 'rEzn+G4fcIGv1NVQXrzgmcdLWzYimoZrg2PnhZ/5w/I9yqhLCFqpbw==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4541228, 'rEzn+G4fcIGv1NVQXrzgmcdLWzYimoZrg2PnhZ/5w/I9yqhLCFqpbw==')">
引用
</a>
</span>
</div>
<a href="#4541228" class="layer">#12楼</a>
<a name="4541228" id="comment_anchor_4541228"></a>
<span class="comment_date">2020-04-03 18:05</span>
<a id="a_comment_author_4541228" href="https://www.cnblogs.com/ping2yingshi/" target="_blank">萍2樱释</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4541228" data-format-type="Markdown" class="blog_comment_body cnblogs-markdown">
<p>请问第一种怎么设置格式?我按照上面步骤做完,可是还是不知道怎么把目录和正文标题链接到一起</p>
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4541228, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4541228, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
<span id="comment_4541228_avatar" style="display:none">
https://pic.cnblogs.com/face/1790388/20190908134559.png
</span>
</div>
</div>
<div class="feedbackItem">
<div class="feedbackListSubtitle">
<div class="feedbackManage">
<span class="comment_actions">
<a href="javascript:void(0);" onclick="return ReplyComment(4551659, 'NddYm4HNPtXpDdtl8FbYgMBIL+1geL0SZtX/i/B7AKfYldZB2FhMIg==')">
回复
</a>
<a href="javascript:void(0);" onclick="return QuoteComment(4551659, 'NddYm4HNPtXpDdtl8FbYgMBIL+1geL0SZtX/i/B7AKfYldZB2FhMIg==')">
引用
</a>
</span>
</div>
<a href="#4551659" class="layer">#13楼</a>
<a name="4551659" id="comment_anchor_4551659"></a>
<span id="comment-maxId" style="display: none">4551659</span>
<span id="comment-maxDate" style="display: none">2020/4/15 下午11:07:54</span>
<span class="comment_date">2020-04-15 23:07</span>
<a id="a_comment_author_4551659" href="https://home.cnblogs.com/u/1997940/" target="_blank">INnnn</a>
</div>
<div class="feedbackCon">
<div id="comment_body_4551659" data-format-type="Markdown" class="blog_comment_body cnblogs-markdown">
<p>🐎</p>
</div>
<div class="comment_vote">
<span class="comment_error" style="color: red"></span>
<a href="javascript:void(0);" class="comment_digg" onclick="return voteComment(4551659, 'Digg', this.parentElement, false);">
支持(0)
</a>
<a href="javascript:void(0);" class="comment_burry" onclick="return voteComment(4551659, 'Bury', this.parentElement, false);">
反对(0)
</a>
</div>
</div>
</div>
<div id="comment_pager_bottom">
</div>
</div>
<script>
var commentManager = new blogCommentManager();
commentManager.renderComments(0);
</script>
<div id="comment_form" class="commentform">
<a name="commentform"></a>
<div id="divCommentShow"></div>
<div id="comment_nav"><span id="span_refresh_tips"></span><a href="javascript:void(0);" onclick="return RefreshCommentList();" id="lnk_RefreshComments" runat="server" clientidmode="Static">刷新评论</a><a href="#" onclick="return RefreshPage();">刷新页面</a><a href="#top">返回顶部</a></div>
<div id="comment_form_container" style="visibility: visible;"><script type="text/javascript" src="https://mention.cnblogs.com//bundles/mention.js?id=20160615"></script>
<div id="commentform_title">发表评论</div>
<span id="tip_comment" style="color:Red"></span>
<div class="commentbox_main comment_textarea">
<div class="commentbox_title">
<div class="commentbox_title_left">
<span id="btn_edit_comment" class="commentbox_tab active" title="编辑评论">编辑</span>
<span id="btn_preview_comment" class="commentbox_tab" title="Markdown 预览">预览</span>
</div>
<div class="commentbox_title_right">
<span id="ubb_bold" class="comment_icon" alt="粗体" title="添加粗体(Ctrl + B)">
<svg class="comment_svg" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill-rule="evenodd">
<path d="m13.221 19c1.4414 0 2.5793-0.27451 3.3759-0.82353 0.92931-0.66667 1.4034-1.7059 1.4034-3.1176 0-0.94118-0.22759-1.7059-0.66379-2.2549-0.45517-0.56863-1.119-0.94118-2.0103-1.1176 0.68276-0.27451 1.1948-0.64706 1.5552-1.1569 0.36034-0.54902 0.55-1.2157 0.55-2 0-1.0588-0.36034-1.902-1.0621-2.5294-0.75862-0.66667-1.8207-1-3.1672-1h-6.2017v14h6.2207zm-0.82196-8h-3.3987v-4h3.4367c0.91139 0 1.557 0.15686 1.9747 0.47059 0.37975 0.29412 0.58861 0.78431 0.58861 1.451 0 0.72549-0.20886 1.2549-0.58861 1.5882-0.39873 0.31373-1.0633 0.4902-2.0127 0.4902zm0.52612 6h-3.9249v-4h3.9855c1.052 0 1.8208 0.16216 2.3064 0.48649 0.46532 0.32432 0.70809 0.84685 0.70809 1.5856 0 0.72072-0.3237 1.2252-0.9711 1.5495-0.50578 0.25225-1.2139 0.37838-2.104 0.37838z" fill-rule="nonzero" stroke-width=".35"></path>
</g>
</svg>
</span>
<span id="ubb_url" class="comment_icon" title="添加链接(Ctrl + K)" alt="链接">
<svg class="comment_svg comment_svg_stroke" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill-rule="evenodd">
<g transform="translate(4 4)" fill-rule="nonzero" stroke-width=".4">
<path d="m6.304 9.696c-0.288-0.288-0.512-0.608-0.704-0.992-0.16-0.32-0.032-0.704 0.288-0.864 0.32-0.16 0.704-0.032 0.864 0.288 0.128 0.224 0.256 0.448 0.448 0.64 0.928 0.928 2.432 0.928 3.36 0l3.36-3.328c0.928-0.928 0.928-2.432 0-3.36s-2.432-0.928-3.36 0l-2.272 2.272c-0.256 0.256-0.64 0.256-0.896 0-0.256-0.256-0.256-0.64 0-0.896l2.272-2.272c1.44-1.44 3.744-1.44 5.184 0 1.44 1.44 1.44 3.744 0 5.184l-3.36 3.296c-0.704 0.704-1.632 1.088-2.592 1.088-0.928 0-1.856-0.352-2.592-1.056z"></path>
<path d="m3.776 15.808c-0.992 0-1.888-0.384-2.592-1.056-1.44-1.44-1.44-3.744 0-5.184l3.328-3.328c1.44-1.44 3.744-1.44 5.184 0 0.288 0.288 0.544 0.64 0.736 1.024 0.16 0.32 0 0.704-0.32 0.864-0.32 0.16-0.704 0-0.864-0.32-0.128-0.256-0.288-0.48-0.48-0.672-0.928-0.928-2.432-0.928-3.36 0l-3.296 3.328c-0.928 0.928-0.928 2.432 0 3.36 0.448 0.448 1.056 0.704 1.664 0.704 0.608 0 1.248-0.256 1.664-0.704l2.112-2.112c0.256-0.256 0.64-0.256 0.896 0s0.256 0.64 0 0.896l-2.112 2.112c-0.672 0.704-1.568 1.088-2.56 1.088z"></path>
</g>
</g>
</svg>
</span>
<span id="ubb_code" class="comment_icon" title="添加代码(Ctrl + `)" alt="代码">
<svg class="comment_svg comment_svg_stroke" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill-rule="evenodd">
<g transform="translate(16 6)" stroke-linecap="round" stroke-width="2">
<line x1=".5" x2="4.5" y1=".7" y2="6.3"></line>
<line transform="translate(2.5 9.1) scale(1 -1) translate(-2.5 -9.1)" x1=".5" x2="4.5" y1="6.3" y2="11.9"></line>
</g>
<g transform="translate(3 6.1)" stroke-linecap="round" stroke-width="2">
<line transform="translate(2.5 3.5) scale(-1 1) translate(-2.5 -3.5)" x1=".5" x2="4.5" y1=".7" y2="6.3"></line>
<line transform="translate(2.5 9.1) scale(-1) translate(-2.5 -9.1)" x1=".5" x2="4.5" y1="6.3" y2="11.9"></line>
</g>
<path transform="translate(12 12.5) scale(1 -1) translate(-12 -12.5)" d="m10.778 7.1249c0.50008-0.11366 0.9978 0.16911 1.1643 0.64128l0.032406 0.11223 2 8.8c0.1224 0.53855-0.21496 1.0744-0.75351 1.1968-0.50008 0.11366-0.9978-0.16911-1.1643-0.64128l-0.032406-0.11223-2-8.8c-0.1224-0.53855 0.21496-1.0744 0.75351-1.1968z" fill-rule="nonzero" stroke-width=".25"></path>
</g>
</svg>
</span>
<span id="ubb_quote" class="comment_icon" title="添加引用(Ctrl + Q)" alt="引用">
<svg class="comment_svg" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill-rule="evenodd">
<g transform="translate(5 4)" fill-rule="nonzero" stroke-width=".25">
<path d="m5.0013 15v-5.2702h-2.8008c-0.13413-3.3762 1.2004-6.2143 4.0009-8.5135l-1.2-1.2163c-3.335 2.2996-5.0013 5.8119-5.0013 10.54v4.4595h5.0013-1.285e-5zm8.7987 0v-5.2702h-2.8008c-0.13453-3.3762 1.2-6.2143 4.0009-8.5135l-1.2-1.2163c-3.335 2.2996-5.0013 5.8119-5.0013 10.54v4.4595h5.0013-1.28e-5z"></path>
</g>
</g>
</svg>
</span>
<span id="ubb_img" class="comment_icon" alt="图片" title="上传图片(Ctrl + I)">
<svg class="comment_svg" version="1.1" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg">
<g fill-rule="evenodd">
<g transform="translate(3 3.8)" fill-rule="nonzero">
<path d="m14.1 0.58235h-11.2c-1.32 0-2.4 1.0482-2.4 2.3294v10.871c0 1.2812 1.08 2.3294 2.4 2.3294h11.2c1.32 0 2.4-1.0482 2.4-2.3294v-10.871c0-1.2812-1.08-2.3294-2.4-2.3294zm0.7 13.569-3.63-3.4165 1.33-1.2909c0.21-0.20382 0.59-0.20382 0.8 0l1.6 1.5529v2.7856c0 0.13588-0.04 0.26206-0.1 0.36882zm-11.9-12.016h11.2c0.44 0 0.8 0.34941 0.8 0.77647v5.8915l-0.47-0.45618c-0.84-0.825-2.22-0.825-3.07 0l-1.35 1.3103-2.39-2.2421c-0.85-0.825-2.22-0.825-3.05-0.019412l-2.48 2.2615v-6.7456c0.01-0.42706 0.37-0.77647 0.81-0.77647zm-0.8 11.647v-1.9897l3.6-3.2806c0.21-0.20382 0.58-0.21353 0.81 0.0097059l6.43 6.0371h-10.04c-0.44 0-0.8-0.33971-0.8-0.77647z"></path>
<ellipse cx="10.5" cy="6.4059" rx="1" ry="1"></ellipse>
</g>
</g>
</svg>
</span>
</div>
</div>
<div style="display:none">
<span id="comment_edit_id"></span>
<span id="span_parentcomment_id"></span>
<span id="span_parent_id"></span>
<span id="span_comment_replyto"></span>
<span id="span_comment_posted"></span>
<span id="span_current_user_id">a693a5ff-d75d-452a-4edb-08d5af5cce02</span>
</div>
<textarea id="tbCommentBody" placeholder="支持 Markdown"></textarea>
<div id="tbCommentBodyPreview" class="feedbackCon" style="display: none">
<div id="tbCommentBodyPreviewBody" class="blog_comment_body comment_preview cnblogs-markdown"></div>
</div>
<div class="commentbox_footer">
<a class="comment_option">Markdown 帮助</a>
<span id="btn_comment_options" class="comment_option">
<input id="ubb_auto_completion" class="inline_middle" type="checkbox">
<label class="inline_middle" for="ubb_auto_completion">自动补全</label>
</span>
</div>
</div>
<p id="commentbox_opt">
<input id="btn_comment_submit" type="button" class="comment_btn" title="提交评论(Ctrl + Enter)" value="提交评论">
<span id="span_comment_canceledit" style="display:none"><a href="javascript:void(0);" onclick="return CancelCommentEdit()">不改了</a></span>
<a href="javascript:void(0);" onclick="return logout();">退出</a>
<a id="commentbox_opt_sub" href="javascript:void(0);" title="订阅后有新评论时会邮件通知您" onclick="commentManager.Subscribe()">订阅评论</a>
</p>
<div id="tip_comment2" style="color:Red"></div>
<p>[Ctrl+Enter快捷键提交]</p>
<script>var commentEditor = initCommentEditor("tbCommentBody");</script>
</div>
<div class="ad_text_commentbox" id="ad_text_under_commentbox"></div>
<div id="ad_t2"></div>
<div id="opt_under_post"></div>
<div id="cnblogs_c1" class="c_ad_block">
<div id="div-gpt-ad-1592365906576-0" style="width: 300px; height: 250px;"></div>
</div>
<div id="under_post_news"></div>
<div id="cnblogs_c2" class="c_ad_block">
<div id="div-gpt-ad-1592366332455-0" style="width: 468px; height: 60px;"></div>
</div>
<div id="under_post_kb">
<div class="itnews c_ad_block">
<b>最新 IT 新闻</b>:
<br>
· <a href="//news.cnblogs.com/n/671065/" target="_blank">百度和滴滴必有一战</a>
<br>
· <a href="//news.cnblogs.com/n/671064/" target="_blank">优酷升级分账规则,网络电影到了"紧要关头"?</a>
<br>
· <a href="//news.cnblogs.com/n/671063/" target="_blank">拼多多和特斯拉没有双赢</a>
<br>
· <a href="//news.cnblogs.com/n/671062/" target="_blank">趣店、乐信:互金路上同路不同命</a>
<br>
· <a href="//news.cnblogs.com/n/671061/" target="_blank">雷军的小米十年:真心话、笑话,Are you OK?</a>
<br>
» <a href="https://news.cnblogs.com/" title="IT 新闻" target="_blank">更多新闻...</a>
</div></div>
<div id="HistoryToday" class="c_ad_block"></div>
<script type="text/javascript">
fixPostBody();
deliverBigBanner();
setTimeout(function() { incrementViewCount(cb_entryId); }, 50); deliverT2();
deliverC1C2();
loadNewsAndKb();
loadBlogSignature();
LoadPostCategoriesTags(cb_blogId, cb_entryId); LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate, cb_postType);
loadOptUnderPost();
GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);
</script>
</div>
</div><!--end: forFlow -->
</div><!--end: mainContent 主体内容容器-->
<div id="sideBar">
<div id="sideBarMain">
<div id="sidebar_news" class="newsItem"><!--done-->
<h3 class="catListTitle">公告</h3>
<div id="blog-news">
<div id="profile_block">
昵称:
<a href="https://home.cnblogs.com/u/xuehaoyue/">
妙音天女
</a>
<br>
园龄:
<a href="https://home.cnblogs.com/u/xuehaoyue/" title="入园时间:2017-01-31">
3年6个月
</a>
<br>
粉丝:
<a href="https://home.cnblogs.com/u/xuehaoyue/followers/">
30
</a>
<br>
关注:
<a href="https://home.cnblogs.com/u/xuehaoyue/followees/">
2
</a>
<div id="p_b_follow">
<a href="javascript:void(0)" onclick="follow('fdceac23-09e7-e611-845c-ac853d9f53ac')">+加关注</a></div>
<script>getFollowStatus('fdceac23-09e7-e611-845c-ac853d9f53ac');</script>
</div>
</div>
</div>
<div id="sidebar_ad"></div>
<div id="blog-calendar" style="">
<table id="blogCalendar" class="Cal" cellspacing="0" cellpadding="0" title="Calendar" border="0">
<tbody>
<tr>
<td colspan="7">
<table class="CalTitle" cellspacing="0" border="0">
<tbody>
<tr>
<td class="CalNextPrev">
<a href="javascript:void(0);" onclick="loadBlogCalendar('2020/07/22'); return false;"><</a>
</td>
<td align="center">2020年8月</td>
<td align="right" class="CalNextPrev">
<a href="javascript:void(0);" onclick="loadBlogCalendar('2020/09/22'); return false;">></a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
<tr>
<th class="CalDayHeader" align="center" abbr="日" scope="col">日</th>
<th class="CalDayHeader" align="center" abbr="一" scope="col">一</th>
<th class="CalDayHeader" align="center" abbr="二" scope="col">二</th>
<th class="CalDayHeader" align="center" abbr="三" scope="col">三</th>
<th class="CalDayHeader" align="center" abbr="四" scope="col">四</th>
<th class="CalDayHeader" align="center" abbr="五" scope="col">五</th>
<th class="CalDayHeader" align="center" abbr="六" scope="col">六</th>
</tr>
<tr>
<td class="CalOtherMonthDay" align="center">26</td>
<td class="CalOtherMonthDay" align="center">27</td>
<td class="CalOtherMonthDay" align="center">28</td>
<td class="CalOtherMonthDay" align="center">29</td>
<td class="CalOtherMonthDay" align="center">30</td>
<td class="CalOtherMonthDay" align="center">31</td>
<td class="CalWeekendDay" align="center">
1
</td>
</tr>
<tr>
<td class="CalWeekendDay" align="center">
2
</td>
<td class="" align="center">
3
</td>
<td class="" align="center">
4
</td>
<td class="" align="center">
5
</td>
<td class="" align="center">
6
</td>
<td class="" align="center">
7
</td>
<td class="CalWeekendDay" align="center">
8
</td>
</tr>
<tr>
<td class="CalWeekendDay" align="center">
9
</td>
<td class="" align="center">
10
</td>
<td class="" align="center">
11
</td>
<td class="" align="center">
12
</td>
<td class="" align="center">
13
</td>
<td class="" align="center">
14
</td>
<td class="CalWeekendDay" align="center">
15
</td>
</tr>
<tr>
<td class="CalWeekendDay" align="center">
16
</td>
<td class="" align="center">
17
</td>
<td class="" align="center">
18
</td>
<td class="" align="center">
19
</td>
<td class="" align="center">
20
</td>
<td class="" align="center">
21
</td>
<td class="CalTodayDay" align="center">
22
</td>
</tr>
<tr>
<td class="CalWeekendDay" align="center">
23
</td>
<td class="" align="center">
24
</td>
<td class="" align="center">
25
</td>
<td class="" align="center">
26
</td>
<td class="" align="center">
27
</td>
<td class="" align="center">
28
</td>
<td class="CalWeekendDay" align="center">
29
</td>
</tr>
<tr>
<td class="CalWeekendDay" align="center">
30
</td>
<td class="" align="center">
31
</td>
<td class="CalOtherMonthDay" align="center">
1
</td>
<td class="CalOtherMonthDay" align="center">
2
</td>
<td class="CalOtherMonthDay" align="center">
3
</td>
<td class="CalOtherMonthDay" align="center">
4
</td>
<td class="CalOtherMonthDay" align="center">
5
</td>
</tr>
</tbody>
</table></div><script>loadBlogDefaultCalendar();</script>
<div id="leftcontentcontainer">
<div id="blog-sidecolumn">
<!-- 搜索 -->
<div id="sidebar_search" class="sidebar-block">
<div id="sidebar_search" class="mySearch">
<h3 class="catListTitle">搜索</h3>
<div id="sidebar_search_box">
<div id="widget_my_zzk" class="div_my_zzk">
<input type="text" id="q" onkeydown="return zzk_go_enter(event);" class="input_my_zzk"> <input onclick="zzk_go()" type="button" value="找找看" id="btnZzk" class="btn_my_zzk">
</div>
<div id="widget_my_google" class="div_my_zzk">
<input type="text" name="google_q" id="google_q" onkeydown="return google_go_enter(event);" class="input_my_zzk"> <input onclick="google_go()" type="button" value="谷歌搜索" class="btn_my_zzk">
</div>
</div>
</div>
</div>
<!-- 常用链接 -->
<div id="sidebar_shortcut" class="sidebar-block">
<div class="catListLink">
<h3 class="catListTitle">
常用链接
</h3>
<ul>
<li><a href="https://www.cnblogs.com/xuehaoyue/p/" title="我的博客的随笔列表">我的随笔</a></li>
<li><a href="https://www.cnblogs.com/xuehaoyue/MyComments.html" title="我的发表过的评论列表">我的评论</a></li>
<li><a href="https://www.cnblogs.com/xuehaoyue/OtherPosts.html" title="我评论过的随笔列表">我的参与</a></li>
<li><a href="https://www.cnblogs.com/xuehaoyue/RecentComments.html" title="我的博客的评论列表">最新评论</a></li>
<li><a href="https://www.cnblogs.com/xuehaoyue/tag/" title="我的博客的标签列表">我的标签</a></li>
</ul>
</div>
</div>
<!-- 最新随笔 -->
<div id="sidebar_recentposts" class="sidebar-block">
<div class="catListEssay">
<h3 class="catListTitle">最新随笔</h3>
<ul>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/10045730.html">1.省市区县街道四级联动下拉菜单</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/9964475.html">2.用原生JS实现多张图片上传及预览功能(兼容IE8)</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/7491264.html">3.移动端滚动的橡皮筋问题</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/7172053.html">4.懒加载和预加载</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6986779.html">5.将通过<input type="file">上传的txt文件存储在localStorage,提取并构建File对象</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6978810.html">6.jQuery Ajax使用FormData上传文件和其他数据,后端web.py获取</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6978374.html">7.bootstrap改变上传文件按钮样式,并显示已上传文件名</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6660315.html">8.整数的分解方法</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6657190.html">9.#1490 : Tree Restoration</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6652900.html">10.动态规划(一):矩阵取数问题</a>
</li>
</ul>
</div>
</div>
<!-- 我的标签 -->
<div id="sidebar_toptags" class="sidebar-block">
<div class="catListTag">
<h3 class="catListTitle">我的标签</h3>
<ul>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/tag/URL/">URL</a>(4)
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/tag/%E4%B8%8D%E4%BC%9A/">不会</a>(2)
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/tag/%E4%B8%8D%E6%98%8E%E7%99%BD%E4%B8%BA%E4%BD%95%E4%B8%8D%E9%80%9A%E8%BF%87/">不明白为何不通过</a>(2)
</li>
</ul>
</div>
</div>
<!-- 积分与排名 -->
<div id="sidebar_scorerank" class="sidebar-block">
<div class="catListBlogRank">
<h3 class="catListTitle">积分与排名</h3>
<ul>
<li class="liScore">
积分 -
40757
</li>
<li class="liRank">
排名 -
22332
</li>
</ul>
</div>
</div>
<!-- 随笔分类、随笔档案、文章分类、新闻分类、相册、链接 -->
<div id="sidebar_categories">
<div id="sidebar_postcategory" class="catListPostCategory sidebar-block">
<h3 class="catListTitle">
随笔分类
</h3>
<ul>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/972471.html" rel="" target="">
HTTP(9)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/950114.html" rel="" target="">
LeetCode(13)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/960903.html" rel="" target="">
笔试算法题(2)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/977098.html" rel="" target="">
常见算法问题(1)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/972472.html" rel="" target="">
工具(2)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/949386.html" rel="" target="">
前端(12)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/1016593.html" rel="" target="">
全栈(1)
</a>
</li>
</ul>
</div>
<div id="sidebar_postarchive" class="catListPostArchive sidebar-block">
<h3 class="catListTitle">
随笔档案
</h3>
<ul>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archive/2018/11.html" rel="" target="">
2018年11月(2)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archive/2017/09.html" rel="" target="">
2017年9月(1)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archive/2017/07.html" rel="" target="">
2017年7月(1)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archive/2017/06.html" rel="" target="">
2017年6月(3)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archive/2017/04.html" rel="" target="">
2017年4月(2)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archive/2017/03.html" rel="" target="">
2017年3月(17)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archive/2017/02.html" rel="" target="">
2017年2月(14)
</a>
</li>
</ul>
</div>
<div id="sidebar_articlecategory" class="catListArticleCategory sidebar-block">
<h3 class="catListTitle">
文章分类
</h3>
<ul>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/category/966371.html" rel="" target="">
工具(1)
</a>
</li>
</ul>
</div>
<div id="sidebar_articlearchive" class="catListArticleArchive sidebar-block">
<h3 class="catListTitle">
文章档案
</h3>
<ul>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/archives/2017/03.html" rel="nofollow noopener noreferrer" target="">
2017年3月(1)
</a>
</li>
</ul>
</div>
</div>
<!-- 最新评论 -->
<div id="sidebar_recentcomments" class="sidebar-block">
<div class="catListComment">
<h3 class="catListTitle">最新评论</h3>
<div class="RecentCommentBlock">
<ul>
<li class="recent_comment_title"><a href="https://www.cnblogs.com/xuehaoyue/p/6650533.html">1. Re:为博客园添加目录的方法总结</a></li>
<li class="recent_comment_body"><p>🐎</p>
</li>
<li class="recent_comment_author">--INnnn</li>
<li class="recent_comment_title"><a href="https://www.cnblogs.com/xuehaoyue/p/6650533.html">2. Re:为博客园添加目录的方法总结</a></li>
<li class="recent_comment_body"><p>请问第一种怎么设置格式?我按照上面步骤做完,可是还是不知道怎么把目录和正文标题链接到一起</p>
</li>
<li class="recent_comment_author">--萍2樱释</li>
<li class="recent_comment_title"><a href="https://www.cnblogs.com/xuehaoyue/p/6650533.html">3. Re:为博客园添加目录的方法总结</a></li>
<li class="recent_comment_body"><p>请问老哥如何实现目录瞬间跳转?这样跳转时间太慢了</p>
</li>
<li class="recent_comment_author">--Pam_sh</li>
<li class="recent_comment_title"><a href="https://www.cnblogs.com/xuehaoyue/p/6549682.html">4. Re:canvas的beginPath和closePath分析总结,包括多段弧的情况</a></li>
<li class="recent_comment_body"><p>非常棒的测试例子</p>
</li>
<li class="recent_comment_author">--几只强心剂</li>
<li class="recent_comment_title"><a href="https://www.cnblogs.com/xuehaoyue/p/6639029.html">5. Re:分块编码(Transfer-Encoding: chunked)</a></li>
<li class="recent_comment_body">你好,我看了一下例子,'This is the data in the first chunk'是35字节,16进制的25换算过来是37字节,第二个例子也是这样。1c表示28,但是'and this ...</li>
<li class="recent_comment_author">--lemon_juice</li>
</ul>
</div>
</div>
</div>
<!-- 阅读排行榜 -->
<div id="sidebar_topviewedposts" class="sidebar-block">
<div class="catListView">
<h3 class="catListTitle">阅读排行榜</h3>
<div id="TopViewPostsBlock">
<ul style="word-break:break-all">
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6410095.html">
1. webpack和webpack-dev-server安装配置(遇到各种问题的解决方法)(63727)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6639029.html">
2. 分块编码(Transfer-Encoding: chunked)(30943)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6978374.html">
3. bootstrap改变上传文件按钮样式,并显示已上传文件名(15151)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6978810.html">
4. jQuery Ajax使用FormData上传文件和其他数据,后端web.py获取(12126)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6650533.html">
5. 为博客园添加目录的方法总结(6114)
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- 评论排行榜 -->
<div id="sidebar_topcommentedposts" class="sidebar-block">
<div class="catListFeedback">
<h3 class="catListTitle">评论排行榜</h3>
<div id="TopFeedbackPostsBlock">
<ul style="word-break:break-all">
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6410095.html">
1. webpack和webpack-dev-server安装配置(遇到各种问题的解决方法)(28)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6650533.html">
2. 为博客园添加目录的方法总结(14)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6978374.html">
3. bootstrap改变上传文件按钮样式,并显示已上传文件名(3)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6639029.html">
4. 分块编码(Transfer-Encoding: chunked)(3)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6557152.html">
5. 总结get和post区别(3)
</a>
</li>
</ul>
</div>
</div>
</div>
<!-- 推荐排行榜 -->
<div id="sidebar_topdiggedposts" class="sidebar-block">
<div id="topdigg_posts_wrap">
<div class="catListView">
<h3 class="catListTitle">推荐排行榜</h3>
<div id="TopDiggPostsBlock">
<ul style="word-break: break-all">
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6650533.html">
1. 为博客园添加目录的方法总结(24)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6549682.html">
2. canvas的beginPath和closePath分析总结,包括多段弧的情况(6)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6639029.html">
3. 分块编码(Transfer-Encoding: chunked)(4)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6410095.html">
4. webpack和webpack-dev-server安装配置(遇到各种问题的解决方法)(4)
</a>
</li>
<li>
<a href="https://www.cnblogs.com/xuehaoyue/p/6623572.html">
5. 正则表达式(2)
</a>
</li>
</ul>
</div>
</div>
</div>
</div></div>
<script>loadBlogSideColumn();</script>
</div>
</div><!--end: sideBarMain -->
</div><!--end: sideBar 侧边栏容器 -->
<div class="clear"></div>
</div><!--end: main -->
<div class="clear"></div>
<div id="footer">
<!--done-->
Copyright © 2020 妙音天女
<br><span id="poweredby">Powered by .NET Core on Kubernetes</span>
</div><!--end: footer -->
</div><!--end: home 自定义的最大容器 -->
<div id="page_end_html">
<script language="javascript" type="text/javascript">
// 生成目录索引列表
// ref: http://www.cnblogs.com/wangqiguo/p/4355032.html
// modified by: zzq
function GenerateContentList()
{
var mainContent = $('#cnblogs_post_body');
var h2_list = $('#cnblogs_post_body h2');//如果你的章节标题不是h2,只需要将这里的h2换掉即可
if(mainContent.length < 1)
return;
if(h2_list.length>0)
{
var content = '<a name="_labelTop"></a>';
content += '<div id="navCategory" style="color:#152e97;">';
content += '<p style="font-size:18px;"><b>目录</b></p>';
content += '<ul>';
for(var i=0; i<h2_list.length; i++)
{
var go_to_top = '<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label' + i + '"></a></div>';
$(h2_list[i]).before(go_to_top);
var h3_list = $(h2_list[i]).nextAll("h3");
var li3_content = '';
for(var j=0; j<h3_list.length; j++)
{
var tmp = $(h3_list[j]).prevAll('h2').first();
if(!tmp.is(h2_list[i]))
break;
var li3_anchor = '<a name="_label' + i + '_' + j + '"></a>';
$(h3_list[j]).before(li3_anchor);
li3_content += '<li><a href="#_label' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li>';
}
var li2_content = '';
if(li3_content.length > 0)
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>';
else
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a></li>';
content += li2_content;
}
content += '</ul>';
content += '</div><p> </p>';
content += '<hr style="height:1px;border:none;border-top:1px dashed #0066CC;"/>';
if($('#cnblogs_post_body').length != 0 )
{
$($('#cnblogs_post_body')[0]).prepend(content);
}
}
}
GenerateContentList();
</script>
</div>
<script type="text/javascript">
/*
功能:生成博客目录的JS工具
测试:IE8,火狐,google测试通过
孤傲苍狼
2014-5-11
*/
var BlogDirectory = {
/*
获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top)
*/
getElementPosition:function (ele) {
var topPosition = 0;
var leftPosition = 0;
while (ele){
topPosition += ele.offsetTop;
leftPosition += ele.offsetLeft;
ele = ele.offsetParent;
}
return {top:topPosition, left:leftPosition};
},
/*
获取滚动条当前位置
*/
getScrollBarPosition:function () {
var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop;
return scrollBarPosition;
},
/*
移动滚动条,finalPos 为目的位置,internal 为移动速度
*/
moveScrollBar:function(finalpos, interval) {
//若不支持此方法,则退出
if(!window.scrollTo) {
return false;
}
//窗体滚动时,禁用鼠标滚轮
window.onmousewheel = function(){
return false;
};
//清除计时
if (document.body.movement) {
clearTimeout(document.body.movement);
}
var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
var dist = 0;
if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出
window.onmousewheel = function(){
return true;
}
return true;
}
if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离
dist = Math.ceil((finalpos - currentpos)/10);
currentpos += dist;
}
if (currentpos > finalpos) {
dist = Math.ceil((currentpos - finalpos)/10);
currentpos -= dist;
}
var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
window.scrollTo(0, currentpos);//移动窗口
if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出
{
window.onmousewheel = function(){
return true;
}
return true;
}
//进行下一步移动
var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")";
document.body.movement = setTimeout(repeat, interval);
},
htmlDecode:function (text){
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
},
/*
创建博客目录,
id表示包含博文正文的 div 容器的 id,
mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!),
interval 表示移动的速度
*/
createBlogDirectory:function (id, mt, st, interval){
//获取博文正文div容器
var elem = document.getElementById(id);
if(!elem) return false;
//获取div中所有元素结点
var nodes = elem.getElementsByTagName("*");
//创建博客目录的div容器
var divSideBar = document.createElement('DIV');
divSideBar.className = 'uprightsideBar';
divSideBar.setAttribute('id', 'uprightsideBar');
var divSideBarTab = document.createElement('DIV');
divSideBarTab.setAttribute('id', 'sideBarTab');
divSideBar.appendChild(divSideBarTab);
var h2 = document.createElement('H2');
divSideBarTab.appendChild(h2);
var txt = document.createTextNode('目录导航');
h2.appendChild(txt);
var divSideBarContents = document.createElement('DIV');
divSideBarContents.style.display = 'none';
divSideBarContents.setAttribute('id', 'sideBarContents');
divSideBar.appendChild(divSideBarContents);
//创建自定义列表
var dlist = document.createElement("dl");
divSideBarContents.appendChild(dlist);
var num = 0;//统计找到的mt和st
mt = mt.toUpperCase();//转化成大写
st = st.toUpperCase();//转化成大写
//遍历所有元素结点
for(var i=0; i<nodes.length; i++)
{
if(nodes[i].nodeName == mt|| nodes[i].nodeName == st)
{
//获取标题文本
var nodetext = nodes[i].innerHTML.replace(/<\/?[^>]+>/g,"");//innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签
nodetext = nodetext.replace(/ /ig, "");//替换掉所有的
nodetext = BlogDirectory.htmlDecode(nodetext);
//插入锚
nodes[i].setAttribute("id", "blogTitle" + num);
var item;
switch(nodes[i].nodeName)
{
case mt: //若为主标题
item = document.createElement("dt");
break;
case st: //若为子标题
item = document.createElement("dd");
break;
}
//创建锚链接
var itemtext = document.createTextNode(nodetext);
item.appendChild(itemtext);
item.setAttribute("name", num);
item.onclick = function(){ //添加鼠标点击触发函数
var pos = BlogDirectory.getElementPosition(document.getElementById("blogTitle" + this.getAttribute("name")));
if(!BlogDirectory.moveScrollBar(pos.top, interval)) return false;
};
//将自定义表项加入自定义列表中
dlist.appendChild(item);
num++;
}
}
if(num == 0) return false;
/*鼠标进入时的事件处理*/
divSideBarTab.onmouseenter = function(){
divSideBarContents.style.display = 'block';
}
/*鼠标离开时的事件处理*/
divSideBar.onmouseleave = function() {
divSideBarContents.style.display = 'none';
}
document.body.appendChild(divSideBar);
}
};
window.onload=function(){
/*页面加载完成之后生成博客目录*/
BlogDirectory.createBlogDirectory("cnblogs_post_body","h2","h3",20);
}
</script><div class="uprightsideBar" id="uprightsideBar"><div id="sideBarTab"><h2>目录导航</h2></div><div id="sideBarContents" style="display: none;"><dl><dt name="0">第一种:在正文上方直接添加目录</dt><dd name="1">1. 申请开通js权限</dd><dd name="2">2. 添加js脚本到"页脚Html代码"</dd><dd name="3">3. 按格式写文章</dd><dt name="4">第二种:在文章右上角添加目录导航</dt><dd name="5">1. 申请开通js权限</dd><dd name="6">2. 添加css代码到"页面定制CSS代码"</dd><dd name="7">3. 添加js脚本到"页首Html代码"</dd><dd name="8">4. 按格式写文章</dd></dl></div></div></body></html>
博客园-其他
[5种回到顶部的写法从实现到增强 - 小火柴的蓝色理想 - 博客园](https://www.cnblogs.com/xiaohuochai/p/5836179.html#anchor2
[博客园为文章添加目录 - ning-wang - 博客园](https://www.cnblogs.com/ning-wang/p/7656847.html
[【分享】博客美化(6)为你的博文自动添加目录 - 数据之巅 - 博客园](https://www.cnblogs.com/asxinyu/p/Bolg_Category_AddArticleCategory_6.html#autoid-1-0-0
[K8s-1-交付dubbo微服务 - zxhy哦 - 博客园](https://www.cnblogs.com/jinmuqq222/p/13545820.html#anchor13
小火柴代码
Context
//requestAnimationFrame兼容写法
if(!window.requestAnimationFrame){
var lastTime = 0;
window.requestAnimationFrame = function(callback){
var currTime = new Date().getTime();
var timeToCall = Math.max(0,16.7-(currTime - lastTime));
var id = window.setTimeout(function(){
callback(currTime + timeToCall);
},timeToCall);
lastTime = currTime + timeToCall;
return id;
}
}
if (!window.cancelAnimationFrame) {
window.cancelAnimationFrame = function(id) {
clearTimeout(id);
};
}
//事件处理程序兼容写法
function addEvent(target,type,handler){
if(target.addEventListener){
target.addEventListener(type,handler,false);
}else{
target.attachEvent('on'+type,function(event){
return handler.call(target,event);
});
}
}
/*******生成元素*******/
var list = document.createElement('ul');
list.id = 'list';
list.innerHTML = '<li id="menuTop">回到顶部</li>\
<li id="menuFavour">点赞(<span id="favourNum">0</span>赞)</li>\
<li id="menuCommand">评论</li>';
document.body.appendChild(list);
/*******添加样式**********/
function loadStyles(str){
var style = document.createElement("style");
style.type = "text/css";
try{
style.innerHTML = str;
}catch(ex){
style.styleSheet.cssText = str;
}
var head = document.getElementsByTagName('head')[0];
head.appendChild(style);
}
loadStyles("#list{margin: 0!important;\
padding: 0!important;\
width: 120px;\
text-align: center;\
cursor: pointer;\
font:20px/40px '宋体';\
background-color: #eee;\
position:fixed;\
display:none;}\
#list li{list-style:none!important;}\
#list li:hover{background-color: lightblue;color: white;font-weight:bold;}");
//DOM结构稳定后,再操作
addEvent(window,'load', contextMenuLoad);
function contextMenuLoad(){
/********显示和隐藏菜单***********/
addEvent(document,'click',function(){
list.style.display = 'none';
})
//右键点击时,菜单显示
document.oncontextmenu = function(e){
e = e || event;
//通常情况下,菜单的位置就是鼠标的位置
list.style.left = e.clientX + 'px';
list.style.top = e.clientY + 'px';
//当鼠标的位置到视口底部的位置小于菜单的高度,则鼠标的位置为菜单的底部位置
if(document.documentElement.clientHeight - e.clientY < list.offsetHeight){
list.style.top = e.clientY - list.offsetHeight + 'px';
}
//当鼠标的位置到视口右侧的位置小于菜单的宽度,则视口的右侧为菜单的右侧
if(document.documentElement.clientWidth - e.clientX < list.offsetWidth){
list.style.left = document.documentElement.clientWidth - list.offsetHeight + 'px';
}
list.style.display = 'block';
//点击右键的同时按下ctrl键,那么将显示默认右键菜单
if(e.ctrlKey){
list.style.display = 'none';
//如果只是点击右键,则显示自定义菜单
}else{
return false;
}
}
/*********回到顶部功能*********/
var timer = null;
menuTop.onclick = function(){
cancelAnimationFrame(timer);
//获取当前毫秒数
var startTime = +new Date();
//获取当前页面的滚动高度
var b = document.body.scrollTop || document.documentElement.scrollTop;
var d = 500;
var c = b;
timer = requestAnimationFrame(function func(){
var t = d - Math.max(0,startTime - (+new Date()) + d);
document.documentElement.scrollTop = document.body.scrollTop = t * (-c) / d + b;
timer = requestAnimationFrame(func);
if(t == d){
cancelAnimationFrame(timer);
}
});
};
/*********点赞功能**********/
//模拟原始点赞按钮的点击事件
var digg = document.getElementById('div_digg');
if(digg){
menuFavour.onclick = digg.children[0].onclick;
}
//获取赞成数的函数
function getfavourNum(){
if(digg){
favourNum.innerHTML = digg.children[0].children[0].innerHTML;
}
}
//页面载入时获取赞成数
getfavourNum();
if(menuFavour.addEventListener){
menuFavour.addEventListener('click',function(){
setTimeout(function(){
getfavourNum();
},2000);
})
}else{
menuFavour.attachEvent('onclick',function(){
setTimeout(function(){
getfavourNum();
},2000);
})
}
/*********评论功能*********/
menuCommand.onclick = function(){
document.getElementById('comment_form_container').scrollIntoView();
}
}
Catalog
//事件处理程序兼容写法
function addEvent(target,type,handler){
if(target.addEventListener){
target.addEventListener(type,handler,false);
}else{
target.attachEvent('on'+type,function(event){
return handler.call(target,event);
});
}
}
//DOM结构稳定后,再操作
addEvent(window,'load', fnCata);
function fnCata(){
/*动态样式*/
function loadStyles(str){
loadStyles.mark = 'load';
var style = document.createElement("style");
style.type = "text/css";
try{
style.innerHTML = str;
}catch(ex){
style.styleSheet.cssText = str;
}
var head = document.getElementsByTagName('head')[0];
head.appendChild(style);
}
if(loadStyles.mark != 'load'){
loadStyles("h6{margin:0;padding:0;}\
.box{position: fixed; left: 10px;top: 60px;font:16px/30px '宋体'; border: 2px solid #ccc;padding: 4px; border-radius:5px;min-width:80px;max-width:118px;overflow:hidden;cursor:default;background:rgba(0,0,0,0.1);}\
.boxHide{border:none;width:60px;height:30px;padding:0;}\
.box-title{text-align:center;font-size:20px;color:#444;}\
.box-quit{position: absolute;text-align:center; right: 0;top: 4px;cursor:pointer;font-weight:bold;}\
.box-quitAnother{background:#3399ff;left:0;top:0;}\
a.box-anchor{display:block;text-decoration:none;color:black; border-left: 3px solid transparent;padding:0 3px;margin-bottom: 3px;white-space: nowrap;overflow: hidden;text-overflow: ellipsis;}\
a.box-anchor:hover{color:#3399ff;}\
a.box-anchorActive{color:#3399ff;text-decoration:underline;border-color:#2175bc};");
};
/*设置章节标题函数*/
function setCatalog(){
//获取页面中所有的script标题
var aEle = document.getElementsByTagName('script');
//设置sel变量,用于保存其选择符的字符串值
var sel;
//获取script标签上的data-selector值
Array.prototype.forEach.call(aEle,function(item,index,array){
sel = item.getAttribute('data-selector');
if(sel) return;
})
//默认参数为h3标签
if(sel == undefined){
sel ='h3';
}
//选取博文
var article = document.getElementById('cnblogs_post_body');
//选取文章中所有的章节标题
var tempArray = article.querySelectorAll(sel);
//为每一个章节标题顺序添加锚点标识
Array.prototype.forEach.call(tempArray, function(item, index, array) {
item.setAttribute('id','anchor' + (1+index));
});
//返回章节标题这个类数组
return tempArray;
}
//设置全局变量Atitle保存添加锚点标识的标题项
var aTitle = setCatalog();
/*生成目录*/
function buildCatalog(arr){
//由于每个部件的创建过程都类似,所以写成一个函数进行服用
function buildPart(json){
var oPart = document.createElement(json.selector);
if(json.id){oPart.setAttribute('id',json.id);}
if(json.className){oPart.className = json.className;}
if(json.innerHTML){oPart.innerHTML = json.innerHTML;}
if(json.href){oPart.setAttribute('href',json.href);}
if(json.title){oPart.title = json.title;}
if(json.appendToBox){
oBox.appendChild(oPart);
}
return oPart;
}
//取得章节标题的个数
len = arr.length;
//创建最外层div
var oBox = buildPart({
selector:'div',
id:'box',
className:'box boxHide'
});
//创建关闭按钮
buildPart({
selector:'span',
id:'boxQuit',
className:'box-quit box-quitAnother',
innerHTML:'显示目录',
appendToBox:true
});
//创建目录标题
buildPart({
selector:'h6',
className:'box-title',
innerHTML:'目录',
appendToBox:true
});
//创建目录项
for(var i = 0; i < len; i++){
buildPart({
selector:'a',
className:'box-anchor',
href:'#anchor' + (1+i),
title:arr[i].innerHTML,
innerHTML:'['+(i+1)+']'+arr[i].innerHTML,
appendToBox:true
});
}
//将目录加入文档中
document.body.appendChild(oBox);
}
buildCatalog(aTitle);
/*点击及滚轮事件*/
(function(){
var oBox = document.getElementById('box');
//设置目录内各组件的点击事件
oBox.onclick = function(e){
e = e || event;
if(oBox.isMove) return;
var target = e.target || e.srcElement;
//设置关闭按钮的点击事件
if(target.id == 'boxQuit'){
if(target.isHide){
target.innerHTML = '显示目录';
target.className = 'box-quit box-quitAnother'
this.className = 'box boxHide';
target.isHide = false;
}else{
target.innerHTML = '×';
target.className = 'box-quit';
this.className = 'box';
target.isHide = true;
}
}
//获取target的href值
var sHref = target.getAttribute('href');
//设置目录项的点击事件
if(/anchor/.test(sHref)){
anchorActive(target);
}
}
//由于点击事件和滚轮事件都需要将目录项发生样式变化,所以声明锚点激活函数
function anchorActive(obj){
var parent = obj.parentNode;
var aAnchor = parent.getElementsByTagName('a');
//将所有目录项样式设置为默认状态
Array.prototype.forEach.call(aAnchor,function(item,index,array){
item.className = 'box-anchor';
})
//将当前目录项样式设置为点击状态
obj.className = 'box-anchor box-anchorActive';
}
//设置滚轮事件
var wheel = function(e){
//获取列表项
var aAnchor = oBox.getElementsByTagName('a');
//获取章节题目项
Array.prototype.forEach.call(aTitle,function(item,index,array){
//获取当前章节题目离可视区上侧的距离
var iTop = item.getBoundingClientRect().top;
//获取下一个章节题目
var oNext = array[index+1];
//如果存在下一个章节题目,则获取下一个章节题目离可视区上侧的距离
if(oNext){
var iNextTop = array[index+1].getBoundingClientRect().top;
}
//当前章节题目离可视区上侧的距离小于10时
if(iTop <= 10){
//当下一个章节题目不存在, 或下一个章节题目离可视区上侧的距离大于10时,设置当前章节题目对应的目录项为激活态
if(iNextTop > 10 || !oNext){
anchorActive(aAnchor[index]);
}
}
});
}
addEvent(window,'scroll',wheel)
})();
/*拖拽*/
(function(){
var x0,y0,x1,y1,isMoving;
var ele = document.getElementById('box');
var L0,R0,T0,B0,EH,EW;
var mousedownHandler = function(e){
e = e || event;
//获取元素距离定位父级的x轴及y轴距离
x0 = this.offsetLeft;
y0 = this.offsetTop;
//获取此时鼠标距离视口左上角的x轴及y轴距离
x1 = e.clientX;
y1 = e.clientY;
//按下鼠标时,表示正在运动
isMoving = true;
//鼠标按下时,获得此时的页面区域
L0 = 0;
R0 = document.documentElement.clientWidth;
T0 = 0;
B0 = document.documentElement.clientHeight;
//鼠标按下时,获得此时的元素宽高
EH = ele.offsetHeight;
EW = ele.offsetWidth;
}
var mousemoveHandler = function(e){
//如果没有触发down事件,而直接触发move事件,则函数直接返回
if(!isMoving){
return;
}
e = e || event;
//获取此时鼠标距离视口左上角的x轴及y轴距离
var x2 = e.clientX;
var y2 = e.clientY;
//计算此时元素应该距离视口左上角的x轴及y轴距离
var X = x0 + (x2 - x1);
var Y = y0 + (y2 - y1);
/******范围限定*******/
//获取鼠标移动时元素四边的瞬时值
var L = X;
var R = X + EW;
var T = Y;
var B = Y + EH;
//在将X和Y赋值给left和top之前,进行范围限定。只有在范围内时,才进行相应的移动
//如果脱离左侧范围,则left置L0
if(L < L0){X = L0;}
//如果脱离右侧范围,则left置为R0
if(R > R0){X = R0 - EW;}
//如果脱离上侧范围,则top置T0
if(T < T0){Y = T0;}
//将X和Y的值赋给left和top,使元素移动到相应位置
ele.style.left = X + 'px';
ele.style.top = Y + 'px';
}
var mouseupHandler = function(e){
//鼠标抬起时,表示停止运动
isMoving = false;
//释放全局捕获
if(ele.releaseCapture){
ele.releaseCapture();
}
}
var preventDefaultHandler = function(e){
e = e || event;
if(e.preventDefault){
e.preventDefault();
}else{
e.returnValue = false;
}
//IE8-浏览器阻止默认行为
if(ele.setCapture){
ele.setCapture();
}
}
addEvent(ele,'mousedown',mousedownHandler);
addEvent(ele,'mousedown',preventDefaultHandler);
addEvent(document,'mousemove',mousemoveHandler)
addEvent(document,'mouseup',mouseupHandler)
})();
};
(function(){
//生成元素
var progress = document.createElement('progress');
progress.id = 'progress';
progress.style.cssText = 'position:fixed;left:0;right:0;bottom:0;width:100%;height:12px;text-align:center;font:12px/12px "宋体";';
document.body.appendChild(progress);
//计算H
var H;
addEvent(window,'load',function(){
progress.max = H = cnblogs_post_body.scrollHeight;
});
//计算h及radio
addEvent(window,'scroll',function(){
var h = document.documentElement.scrollTop || document.body.scrollTop;
progress.value = h;
var radio = (h/H >= 1) ? 1 : h/H;
progress.innerHTML = progress.title = Math.floor(100*radio) + '%';
});
})();
(function(){
function whichMobile(){
var ua = navigator.userAgent;
if(/iPhone OS (\d+_\d+)/.test(ua)){
return 'iPhone' + RegExp.$1.replace("_",".");
}
if(/iPad.+OS (\d+_\d+)/.test(ua)){
return 'iPad' + RegExp.$1.replace("_",".")
}
if(/Android (\d+\.\d+)/.test(ua)){
return 'Android' + RegExp["$1"];
}
}
//如果是非移动端,则执行如下代码
if(!whichMobile()){
//获取博文标题
var oBox = document.getElementById('topics');
var oTitle = oBox.getElementsByTagName('h1')[0];
oTitle.style.paddingRight = '0';
//创建标识图片及外层包装div
var oImgBox = document.createElement('div');
oImgBox.style.cssText = 'position:absolute;margin-left:6px;display:inline-block;vertical-align:middle';
var oImg = new Image();
oImg.id = 'oImg';
oImg.style.cursor = 'pointer';
oImg.src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAoklEQVQ4T+2T4Q2CMBCFv27CBjgCG+gIjAAbOAIjOIJs4Ai6gRvIBpjXXCOp19T/8pJLoTneXcj3Ah91wAV4bu68xwXoAZ2EzEAmE9AWTB6AelRDyaAx9zgh0wE4ATczcTdIE7wl0oe7wX/8RMHigfQTB3fDdM1IEvYyONdIVEOSqDwCY2Z2NaS/UNbqMSQmvauUPlfbNKpBSdTUVyXSs/XyBlRCNBG20I28AAAAAElFTkSuQmCC";
oImg.style.margin = '0';
oImgBox.appendChild(oImg);
//将标识图片插入标题后面
oTitle.appendChild(oImgBox);
//动态生成script标签,引入qrcode插件
var script = document.createElement("script");
script.type = "text/javascript";
script.src = 'https://files.cnblogs.com/files/xiaohuochai/qrcode.min.js';
document.body.appendChild(script);
//动态生成div标签,用于放置通过qrcode插件生成的二维码大图,默认隐藏显示
var oDiv = document.createElement('div');
oDiv.id = 'qrcode';
oDiv.mark = false;
oDiv.style.cssText = 'display:none;position:absolute;left:20px;top:-40px';
oImgBox.appendChild(oDiv);
addEvent(window,'load',function(){
new QRCode(oDiv, {
text: location.href,
width: 80,
height: 80
});
})
//鼠标移入标识图片外层oImgBox后,在该标识图片的右侧显示二维码图片
addEvent(oImgBox,'click',function(){
//如果mark为真,说明二维码图片正在显示,将其隐藏
if(oDiv.mark){
oDiv.style.display = 'none';
//否则说明二维码图片正在隐藏,将其显示
}else{
oDiv.style.display = 'block';
}
//将mark标识置反
oDiv.mark = !oDiv.mark;
})
}
})();
测试
以下这串代码,
分析下,
第一部分将网页的所有h2,h3提取出来,给他们加上超链接(也叫)
第二部分,每次修改的文本,都记录在了content字符串上,最后将content字符串放到了页首标签下,
<script language="javascript" type="text/javascript">
// 生成目录索引列表
// ref: http://www.cnblogs.com/wangqiguo/p/4355032.html
// modified by: zzq
function GenerateContentList()
{
var mainContent = $('#cnblogs_post_body');
var h2_list = $('#cnblogs_post_body h2');//如果你的章节标题不是h2,只需要将这里的h2换掉即可
if(mainContent.length < 1)
return;
if(h2_list.length>0)
{
var content = '<a name="_labelTop"></a>';
content += '<div id="navCategory" style="color:#152e97;">';
content += '<p style="font-size:18px;"><b>目录</b></p>';
content += '<ul>';
for(var i=0; i<h2_list.length; i++)
{
var go_to_top = '<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label' + i + '"></a></div>';
$(h2_list[i]).before(go_to_top);
var h3_list = $(h2_list[i]).nextAll("h3");
var li3_content = '';
for(var j=0; j<h3_list.length; j++)
{
var tmp = $(h3_list[j]).prevAll('h2').first();
if(!tmp.is(h2_list[i]))
break;
var li3_anchor = '<a name="_label' + i + '_' + j + '"></a>';
$(h3_list[j]).before(li3_anchor);
li3_content += '<li><a href="#_label' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li>';
}
var li2_content = '';
if(li3_content.length > 0)
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>';
else
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a></li>';
content += li2_content;
}
content += '</ul>';
content += '</div><p> </p>';
content += '<hr style="height:1px;border:none;border-top:1px dashed #0066CC;"/>';
if($('#cnblogs_post_body').length != 0 )
{
$($('#cnblogs_post_body')[0]).prepend(content);
}
}
}
GenerateContentList();
</script>
A标签才是超链接,dt标签不管用
Li是换行标签,每个a标签包含在一个li标签里,实现了换行。
版本
版本v1-右上角导航
版本说明:右上角导航代码修改,最初版,此版本问题是目录链接不正确,
<script type="text/javascript">
/*
功能:生成博客目录的JS工具
测试:IE8,火狐,google测试通过
孤傲苍狼
2014-5-11
*/
var BlogDirectory = {
/*
获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top)
*/
getElementPosition:function (ele) {
var topPosition = 0;
var leftPosition = 0;
while (ele){
topPosition += ele.offsetTop;
leftPosition += ele.offsetLeft;
ele = ele.offsetParent;
}
return {top:topPosition, left:leftPosition};
},
/*
获取滚动条当前位置
*/
getScrollBarPosition:function () {
var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop;
return scrollBarPosition;
},
/*
移动滚动条,finalPos 为目的位置,internal 为移动速度
*/
moveScrollBar:function(finalpos, interval) {
//若不支持此方法,则退出
if(!window.scrollTo) {
return false;
}
//窗体滚动时,禁用鼠标滚轮
window.onmousewheel = function(){
return false;
};
//清除计时
if (document.body.movement) {
clearTimeout(document.body.movement);
}
var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
var dist = 0;
if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出
window.onmousewheel = function(){
return true;
}
return true;
}
if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离
dist = Math.ceil((finalpos - currentpos)/10);
currentpos += dist;
}
if (currentpos > finalpos) {
dist = Math.ceil((currentpos - finalpos)/10);
currentpos -= dist;
}
var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
window.scrollTo(0, currentpos);//移动窗口
if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出
{
window.onmousewheel = function(){
return true;
}
return true;
}
//进行下一步移动
var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")";
document.body.movement = setTimeout(repeat, interval);
},
htmlDecode:function (text){
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
},
/*
创建博客目录,
id表示包含博文正文的 div 容器的 id,
mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!),
interval 表示移动的速度
*/
createBlogDirectory:function (id, mt, st, interval){
//获取博文正文div容器
var elem = document.getElementById(id);
if(!elem) return false;
//获取div中所有元素结点
var nodes = elem.getElementsByTagName("*");
//创建博客目录的div容器
var divSideBar = document.createElement('DIV');
divSideBar.className = 'uprightsideBar';
divSideBar.setAttribute('id', 'uprightsideBar');
var divSideBarTab = document.createElement('DIV');
divSideBarTab.setAttribute('id', 'sideBarTab');
divSideBar.appendChild(divSideBarTab);
var h2 = document.createElement('H2');
divSideBarTab.appendChild(h2);
var txt = document.createTextNode('目录导航');
h2.appendChild(txt);
var divSideBarContents = document.createElement('DIV');
divSideBarContents.style.display = 'none';
divSideBarContents.setAttribute('id', 'sideBarContents');
divSideBar.appendChild(divSideBarContents);
//创建自定义列表
var dlist = document.createElement("dl");
divSideBarContents.appendChild(dlist);
var num = 0;//统计找到的mt和st
mt = mt.toUpperCase();//转化成大写
st = st.toUpperCase();//转化成大写
//遍历所有元素结点
for(var i=0; i<nodes.length; i++)
{
if(nodes[i].nodeName == mt|| nodes[i].nodeName == st)
{
//获取标题文本
var nodetext = nodes[i].innerHTML + "
";//innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签
nodetext = BlogDirectory.htmlDecode(nodetext);
//插入锚
nodes[i].setAttribute("id", "blogTitle" + num);
var item;
switch(nodes[i].nodeName)
{
case mt: //若为主标题
item = document.createElement("a");
break;
case st: //若为子标题
item = document.createElement("a");
break;
}
//创建锚链接
var itemtext = document.createTextNode(nodetext);
item.appendChild(itemtext);
item.setAttribute("href", "#_label" + num);
var brDiv = document.createElement('br');
item.appendChild(brDiv);//追加换行
//将自定义表项加入自定义列表中
dlist.appendChild(item);
num++;
}
}
if(num == 0) return false;
/*鼠标进入时的事件处理*/
divSideBarTab.onmouseenter = function(){
divSideBarContents.style.display = 'block';
}
/*鼠标离开时的事件处理*/
divSideBar.onmouseleave = function() {
divSideBarContents.style.display = 'none';
}
document.body.appendChild(divSideBar);
}
};
window.onload=function(){
/*页面加载完成之后生成博客目录*/
BlogDirectory.createBlogDirectory("cnblogs_post_body","h2","h3",100);
}
</script>
版本v2--
<script type="text/javascript">
/*
功能:生成博客目录的JS工具
测试:IE8,火狐,google测试通过
孤傲苍狼
2014-5-11
*/
var BlogDirectory = {
/*
获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top)
*/
getElementPosition:function (ele) {
var topPosition = 0;
var leftPosition = 0;
while (ele){
topPosition += ele.offsetTop;
leftPosition += ele.offsetLeft;
ele = ele.offsetParent;
}
return {top:topPosition, left:leftPosition};
},
/*
获取滚动条当前位置
*/
getScrollBarPosition:function () {
var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop;
return scrollBarPosition;
},
/*
移动滚动条,finalPos 为目的位置,internal 为移动速度
*/
moveScrollBar:function(finalpos, interval) {
//若不支持此方法,则退出
if(!window.scrollTo) {
return false;
}
//窗体滚动时,禁用鼠标滚轮
window.onmousewheel = function(){
return false;
};
//清除计时
if (document.body.movement) {
clearTimeout(document.body.movement);
}
var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
var dist = 0;
if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出
window.onmousewheel = function(){
return true;
}
return true;
}
if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离
dist = Math.ceil((finalpos - currentpos)/10);
currentpos += dist;
}
if (currentpos > finalpos) {
dist = Math.ceil((currentpos - finalpos)/10);
currentpos -= dist;
}
var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
window.scrollTo(0, currentpos);//移动窗口
if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出
{
window.onmousewheel = function(){
return true;
}
return true;
}
//进行下一步移动
var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")";
document.body.movement = setTimeout(repeat, interval);
},
htmlDecode:function (text){
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
},
//修改部分
/*
创建博客目录,
id表示包含博文正文的 div 容器的 id,
mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!),
interval 表示移动的速度
*/
createBlogDirectory:function (id, mt, st, interval){
//获取博文正文div容器
var elem = document.getElementById(id);
if(!elem) return false;
//获取div中所有元素结点
var nodes = elem.getElementsByTagName("*");
//创建博客目录的div容器
var divSideBar = document.createElement('DIV');
divSideBar.className = 'uprightsideBar';
divSideBar.setAttribute('id', 'uprightsideBar');
var divSideBarTab = document.createElement('DIV');
divSideBarTab.setAttribute('id', 'sideBarTab');
divSideBar.appendChild(divSideBarTab);//在divsidebar后面添加了divsidebartab
var h2 = document.createElement('H2');
divSideBarTab.appendChild(h2);
var txt = document.createTextNode('目录导航');
h2.appendChild(txt);
var divSideBarContents = document.createElement('DIV');
divSideBarContents.style.display = 'none';
divSideBarContents.setAttribute('id', 'sideBarContents');
divSideBar.appendChild(divSideBarContents);
//创建自定义列表
var dlist = document.createElement("dl");
divSideBarContents.appendChild(dlist);
var num = 0;//统计找到的mt和st
mt = mt.toUpperCase();//转化成大写
st = st.toUpperCase();//转化成大写
//遍历所有元素结点
for(var i=0; i<nodes.length; i++)
{
if(nodes[i].nodeName == mt|| nodes[i].nodeName == st)
{
//获取标题文本
var nodetext = nodes[i].innerHTML;//innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签,+ "
"代表换行
nodetext = BlogDirectory.htmlDecode(nodetext);
//插入锚
nodes[i].setAttribute("id", "blogTitle" + num); //没什么用
var item;
switch(nodes[i].nodeName)
{
case mt: //若为主标题
item = document.createElement("a");
var nodehref = "#" + nodes[i].previousSibling.lastChild.name; //调用h2节点上节点a
break;
case st: //若为子标题
item = document.createElement("a");
var nodehref = "#" + nodes[i].previousSibling.name; //调用h2节点上节点a
break;
}
//创建锚链接
var itemtext = document.createTextNode(nodetext);
item.appendChild(itemtext);
console.log(nodehref, itemtext); //在浏览器控制台打印出值
item.setAttribute("href", nodehref);
var brDiv = document.createElement('br');
item.appendChild(brDiv);//追加换行
//将自定义表项加入自定义列表中
dlist.appendChild(item);
num++;
}
}
if(num == 0) return false;
/*鼠标进入时的事件处理*/
divSideBarTab.onmouseenter = function(){
divSideBarContents.style.display = 'block';
}
/*鼠标离开时的事件处理*/
divSideBar.onmouseleave = function() {
divSideBarContents.style.display = 'none';
}
document.body.appendChild(divSideBar);
}
};
window.onload=function(){
/*页面加载完成之后生成博客目录*/
BlogDirectory.createBlogDirectory("cnblogs_post_body","h2","h3",100);
}
</script>
版本v3--发布
页面定制css代码
/*生成博客目录的CSS*/
#uprightsideBar{
font-size:12px;
font-family:Arial, Helvetica, sans-serif;
text-align:left;
position:fixed;/*将div的位置固定到距离top:50px,right:0px的位置,这样div就会处在最右边的位置,距离顶部50px*/
top:50px;
right:0px;
width: auto;
height: auto;
}
#sideBarTab{
float:left;
width:30px;
border:1px solid #e5e5e5;
border-right:none;
text-align:center;
background:#ffffff;
}
#sideBarContents{
float:left;
overflow:auto;
overflow-x:hidden;!important;
width:200px;
min-height:108px;
max-height:460px;
border:1px solid #e5e5e5;
border-right:none;
background:#ffffff;
}
#sideBarContents dl{
margin:0;
padding:0;
}
#sideBarContents dt{
margin-top:5px;
margin-left:5px;
}
#sideBarContents dd, dt {
cursor: pointer;
}
#sideBarContents dd:hover, dt:hover {
color:#A7995A;
}
#sideBarContents dd{
margin-left:20px;
}
页首html代码
<script language="javascript" type="text/javascript">
// 生成目录索引列表
// ref: http://www.cnblogs.com/wangqiguo/p/4355032.html
// modified by: zzq
function GenerateContentList()
{
var mainContent = $('#cnblogs_post_body');
var h2_list = $('#cnblogs_post_body h2');//如果你的章节标题不是h2,只需要将这里的h2换掉即可
if(mainContent.length < 1)
return;
if(h2_list.length>0)
{
//这部分是生成的目录标题及样式
var content = '<a name="_labelTop"></a>'; //这个a标签为回到顶部的链接地址。
content += '<div id="navCategory" style="color:#152e97;">';
content += '<p style="font-size:18px;"><b>目录</b></p>';
content += '<ul>';
//开始遍历标题h2
for(var i=0; i<h2_list.length; i++)
{
var go_to_top = '<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label' + i + '"></a></div>'; //在每一个标题前,加上回到顶部的href链接,以及为该位置生成了a标签
$(h2_list[i]).before(go_to_top); //并将这串字符串添加到每个h2标签之前,也就是为每个h2标签添加了超链接
var h3_list = $(h2_list[i]).nextAll("h3"); //拿到h2标签后面所有的h3标签,是一个数组,并将其赋值
var li3_content = '';
for(var j=0; j<h3_list.length; j++) //遍历所有当前h2标签后面的所有h3标签
{
var tmp = $(h3_list[j]).prevAll('h2').first(); //获取h3节点前面所有的h2节点的第一个节点
if(!tmp.is(h2_list[i])) //tmp是i所在的h2节点后的同级h3节点所有节点中的j。前面的h2节点集合的第一个(感觉应该选最后一个,可能是和next相反(第一是最后)),如果不是与h2[i]节点相等了,就跳出循环;因为j后面有h2,所有要暂停遍历
break;
var li3_anchor = '<a name="_label' + i + '_' + j + '"></a>';
$(h3_list[j]).before(li3_anchor); //在当前遍历到j的h3标签加上a标签
li3_content += '<li><a href="#_label' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li>'; //给首页目录也加上href,链接到上面的a标签
}
var li2_content = '';
if(li3_content.length > 0)
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>';
else
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a></li>';
content += li2_content;
}
content += '</ul>';
content += '</div><p> </p>';
content += '<hr style="height:1px;border:none;border-top:1px dashed #0066CC;"/>';
if($('#cnblogs_post_body').length != 0 )
{
$($('#cnblogs_post_body')[0]).prepend(content);
}
}
}
GenerateContentList();
</script>
页脚html代码
<script type="text/javascript">
/*
功能:生成博客目录的JS工具
测试:IE8,火狐,google测试通过
孤傲苍狼
2014-5-11
*/
var BlogDirectory = {
/*
获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top)
*/
getElementPosition:function (ele) {
var topPosition = 0;
var leftPosition = 0;
while (ele){
topPosition += ele.offsetTop;
leftPosition += ele.offsetLeft;
ele = ele.offsetParent;
}
return {top:topPosition, left:leftPosition};
},
/*
获取滚动条当前位置
*/
getScrollBarPosition:function () {
var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop;
return scrollBarPosition;
},
/*
移动滚动条,finalPos 为目的位置,internal 为移动速度
*/
moveScrollBar:function(finalpos, interval) {
//若不支持此方法,则退出
if(!window.scrollTo) {
return false;
}
//窗体滚动时,禁用鼠标滚轮
window.onmousewheel = function(){
return false;
};
//清除计时
if (document.body.movement) {
clearTimeout(document.body.movement);
}
var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
var dist = 0;
if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出
window.onmousewheel = function(){
return true;
}
return true;
}
if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离
dist = Math.ceil((finalpos - currentpos)/10);
currentpos += dist;
}
if (currentpos > finalpos) {
dist = Math.ceil((currentpos - finalpos)/10);
currentpos -= dist;
}
var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
window.scrollTo(0, currentpos);//移动窗口
if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出
{
window.onmousewheel = function(){
return true;
}
return true;
}
//进行下一步移动
var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")";
document.body.movement = setTimeout(repeat, interval);
},
htmlDecode:function (text){
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
},
/*
创建博客目录,
id表示包含博文正文的 div 容器的 id,
mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!),
interval 表示移动的速度
*/
createBlogDirectory:function (id, mt, st, interval){
//获取博文正文div容器
var elem = document.getElementById(id);
if(!elem) return false;
//获取div中所有元素结点
var nodes = elem.getElementsByTagName("*");
//创建博客目录的div容器
var divSideBar = document.createElement('DIV');
divSideBar.className = 'uprightsideBar';
divSideBar.setAttribute('id', 'uprightsideBar');
var divSideBarTab = document.createElement('DIV');
divSideBarTab.setAttribute('id', 'sideBarTab');
divSideBar.appendChild(divSideBarTab);
var h2 = document.createElement('H2');
divSideBarTab.appendChild(h2);
var txt = document.createTextNode('目录导航');
h2.appendChild(txt);
var divSideBarContents = document.createElement('DIV');
divSideBarContents.style.display = 'none';
divSideBarContents.setAttribute('id', 'sideBarContents');
divSideBar.appendChild(divSideBarContents);
//创建自定义列表
var dlist = document.createElement("dl");
divSideBarContents.appendChild(dlist);
var num = 0;//统计找到的mt和st
mt = mt.toUpperCase();//转化成大写
st = st.toUpperCase();//转化成大写
//遍历所有元素结点
for(var i=0; i<nodes.length; i++)
{
if(nodes[i].nodeName == mt|| nodes[i].nodeName == st)
{
//获取标题文本
var nodetext = nodes[i].innerHTML;//innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签,+ "
"代表换行
nodetext = BlogDirectory.htmlDecode(nodetext);
//插入锚
nodes[i].setAttribute("id", "blogTitle" + num); //没什么用
var item;
switch(nodes[i].nodeName)
{
case mt: //若为主标题
item = document.createElement("a");
var nodehref = "#" + nodes[i].previousSibling.lastChild.name; //调用h2节点上节点a
break;
case st: //若为子标题
item = document.createElement("a");
var nodehref = "#" + nodes[i].previousSibling.name; //调用h2节点上节点a
break;
}
//创建锚链接
var itemtext = document.createTextNode(nodetext);
item.appendChild(itemtext);
console.log(nodehref, itemtext); //在浏览器控制台打印出值
item.setAttribute("href", nodehref);
var brDiv = document.createElement('br');
item.appendChild(brDiv);//追加换行
//将自定义表项加入自定义列表中
dlist.appendChild(item);
num++;
}
}
if(num == 0) return false;
/*鼠标进入时的事件处理*/
divSideBarTab.onmouseenter = function(){
divSideBarContents.style.display = 'block';
}
/*鼠标离开时的事件处理*/
divSideBar.onmouseleave = function() {
divSideBarContents.style.display = 'none';
}
document.body.appendChild(divSideBar);
}
};
window.onload=function(){
/*页面加载完成之后生成博客目录*/
BlogDirectory.createBlogDirectory("cnblogs_post_body","h2","h3",100);
}
</script>
版本v4
功能:
添加h1,h2,h3。3个标题生成目录
代码分析
代码
页首的html代码
<script language="javascript" type="text/javascript">
// 生成目录索引列表
// ref: http://www.cnblogs.com/wangqiguo/p/4355032.html
// modified by: zzq
function GenerateContentList()
{
var mainContent = $('#cnblogs_post_body');
var h1_list = $('#cnblogs_post_body h1');//如果你的章节标题不是h1,只需要将这里的h1换掉即可
if(mainContent.length < 1)
return;
if(h1_list.length>0)
{
var content = '<a name="_labelTop"></a>';
content += '<div id="navCategory" style="color:#152e97;">';
content += '<p style="font-size:18px;"><b>目录</b></p>';
content += '<ul>';
var li1_content = '';
for(var i=0; i<h1_list.length; i++)
{
var go_to_top = '<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label' + i + '"></a></div>';
$(h1_list[i]).before(go_to_top);
li1_content = '<li><a href="#_label' + i + '">' + $(h1_list[i]).text() + '</a></li>';
content += li1_content;
var h2_list = $(h1_list[i]).nextAll("h2");
var li2_content = '';
for(var j=0; j<h2_list.length; j++)
{
var tmp = $(h2_list[j]).prevAll('h1').first();
if(!tmp.is(h1_list[i]))
break;
var li2_anchor = ' <div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label' + i + '_' + j + '"></a>';
$(h2_list[j]).before(li2_anchor);
li2_content = '<ul><li><a href="#_label' + i + '_' + j + '">' + $(h2_list[j]).text() + '</a></li></ul>';
content += li2_content;
var h3_list = $(h2_list[j]).nextAll("h3");
var li3_content = '';
for(var k=0; k<h3_list.length; k++)
{
var tmp_k = $(h3_list[k]).prevAll('h2').first();
if(!tmp_k.is(h2_list[j]))
break;
var li3_anchor = '<div style="text-align: right;"><a href="#_labelTop" style="color:#f68a33">回到顶部</a><a name="_label' + i + '_' + j + '_' + k +'"></a>';
$(h3_list[k]).before(li3_anchor);
li3_content = '<ul><ul><li><a href="#_label' + i + '_' + j + '_' + k + '">' + $(h3_list[k]).text() + '</a></li></ul></ul>';
content += li3_content;
}
}
}//第一层for循环,h1
content += '</ul>';
content += '</div><p> </p>';
content += '<hr style="height:1px;border:none;border-top:1px dashed #0066CC;"/>';
console.log(content);
if($('#cnblogs_post_body').length != 0 )
{
$($('#cnblogs_post_body')[0]).prepend(content);
}
}
}
GenerateContentList();
</script>
页脚
<script type="text/javascript">
/*
功能:生成博客目录的JS工具
测试:IE8,火狐,google测试通过
孤傲苍狼
2014-5-11
*/
var BlogDirectory = {
/*
获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top)
*/
getElementPosition:function (ele) {
var topPosition = 0;
var leftPosition = 0;
while (ele){
topPosition += ele.offsetTop;
leftPosition += ele.offsetLeft;
ele = ele.offsetParent;
}
return {top:topPosition, left:leftPosition};
},
/*
获取滚动条当前位置
*/
getScrollBarPosition:function () {
var scrollBarPosition = document.body.scrollTop || document.documentElement.scrollTop;
return scrollBarPosition;
},
/*
移动滚动条,finalPos 为目的位置,internal 为移动速度
*/
moveScrollBar:function(finalpos, interval) {
//若不支持此方法,则退出
if(!window.scrollTo) {
return false;
}
//窗体滚动时,禁用鼠标滚轮
window.onmousewheel = function(){
return false;
};
//清除计时
if (document.body.movement) {
clearTimeout(document.body.movement);
}
var currentpos =BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
var dist = 0;
if (currentpos == finalpos) {//到达预定位置,则解禁鼠标滚轮,并退出
window.onmousewheel = function(){
return true;
}
return true;
}
if (currentpos < finalpos) {//未到达,则计算下一步所要移动的距离
dist = Math.ceil((finalpos - currentpos)/10);
currentpos += dist;
}
if (currentpos > finalpos) {
dist = Math.ceil((currentpos - finalpos)/10);
currentpos -= dist;
}
var scrTop = BlogDirectory.getScrollBarPosition();//获取滚动条当前位置
window.scrollTo(0, currentpos);//移动窗口
if(BlogDirectory.getScrollBarPosition() == scrTop)//若已到底部,则解禁鼠标滚轮,并退出
{
window.onmousewheel = function(){
return true;
}
return true;
}
//进行下一步移动
var repeat = "BlogDirectory.moveScrollBar(" + finalpos + "," + interval + ")";
document.body.movement = setTimeout(repeat, interval);
},
htmlDecode:function (text){
var temp = document.createElement("div");
temp.innerHTML = text;
var output = temp.innerText || temp.textContent;
temp = null;
return output;
},
/*
创建博客目录,
id表示包含博文正文的 div 容器的 id,
mt 和 st 分别表示主标题和次级标题的标签名称(如 H2、H3,大写或小写都可以!),
interval 表示移动的速度
*/
createBlogDirectory:function (id, mt, st, interval){
//获取博文正文div容器
var elem = document.getElementById(id);
if(!elem) return false;
//获取div中所有元素结点
var nodes = elem.getElementsByTagName("*");
//创建博客目录的div容器
var divSideBar = document.createElement('DIV');
divSideBar.className = 'uprightsideBar';
divSideBar.setAttribute('id', 'uprightsideBar');
var divSideBarTab = document.createElement('DIV');
divSideBarTab.setAttribute('id', 'sideBarTab');
divSideBar.appendChild(divSideBarTab);
var h2 = document.createElement('H2');
divSideBarTab.appendChild(h2);
var txt = document.createTextNode('目录导航');
h2.appendChild(txt);
var divSideBarContents = document.createElement('DIV');
divSideBarContents.style.display = 'none';
divSideBarContents.setAttribute('id', 'sideBarContents');
divSideBar.appendChild(divSideBarContents);
//创建自定义列表
var dlist = document.createElement("dl");
divSideBarContents.appendChild(dlist);
var num = 0;//统计找到的mt和st
mt = mt.toUpperCase();//转化成大写
st = st.toUpperCase();//转化成大写
//遍历所有元素结点
for(var i=0; i<nodes.length; i++)
{
if(nodes[i].nodeName == mt|| nodes[i].nodeName == st)
{
//获取标题文本
var nodetext = nodes[i].innerHTML;//innerHTML里面的内容可能有HTML标签,所以用正则表达式去除HTML的标签,+ "
"代表换行
nodetext = BlogDirectory.htmlDecode(nodetext);
//插入锚
nodes[i].setAttribute("id", "blogTitle" + num); //没什么用
var item;
switch(nodes[i].nodeName)
{
case mt: //若为主标题
item = document.createElement("a");
var nodehref = "#" + nodes[i].previousSibling.lastChild.name; //调用h2上一个节点div的最后一个节点a。然后读取他的属性name,也就是链接地址
break;
case st: //若为子标题
item = document.createElement("a");
var nodehref ="#" + nodes[i].previousSibling.lastChild.name; //调用h2上一个节点div的最后一个节点a。然后读取他的属性name,也就是链接地址
break;
}
//创建锚链接
var itemtext = document.createTextNode(nodetext);
item.appendChild(itemtext);
item.setAttribute("href", nodehref);
var brDiv = document.createElement('br');
item.appendChild(brDiv);//追加换行
//将自定义表项加入自定义列表中
dlist.appendChild(item);
num++;
}
}
if(num == 0) return false;
/*鼠标进入时的事件处理*/
divSideBarTab.onmouseenter = function(){
divSideBarContents.style.display = 'block';
}
/*鼠标离开时的事件处理*/
divSideBar.onmouseleave = function() {
divSideBarContents.style.display = 'none';
}
document.body.appendChild(divSideBar);
}
};
window.onload=function(){
/*页面加载完成之后生成博客目录*/
BlogDirectory.createBlogDirectory("cnblogs_post_body","h1","h2",100);
}
</script>
故障
版本v1-链接生成规则不一致
首页编码的生成规律是h2为label+h2数字,h2的规律是label+h2的数字_h2顺序的数字
我们的导航框是用的node遍历,得到的结果都是label+数字
我只是照着你bai的问题写的du:
<script type="text/javascript">
function getHref(){
var hrefArr = document.getElementsByTagName('a'); //获取这个页面zhi的所有A标签
for( var i=0; i<hrefArr.length; i++ ){
//全部修改为'dpan';
hrefArr[i].href = 'dpan'; //修改语dao句
document.write(nodes.value);
}
}
</script>
版本v2-h2标签取上级标签失败
使用的代码是取h2或者h2的上一个标签,现在h2应该取上一个标签第2个a标签
取上一个标签: var nodehref = nodes[i].previousSiblinghref.name; //取到的是div标签
console.log(nodes[i].previousSibling.lastChild.name, itemtext);
修改如下:
var nodehref = "#" + nodes[i].previousSibling.name; //调用h2节点上节点a
版本v4-语法有问题
h1,h2,h3这3层集合对应遍历的I,j,k循环遍历好多引用错了
比如遍历到第一个h1,开始遍历h2,在遍历h2第一个时开始遍历h2,下面的h3.
这样就获得了该h2下的所有h3串文本li3,但是h2的遍历还没有结束
继续第二个h2,
这样就导致了h2生成了一个h2串,h3生成了一个h3串,
应该是每个h2串下面有一串h3
知识点
html语言
<ul> 标签是写在li标签外面,a标签应该写在li里面。一个ul代表一个缩进,还给加2个圆圈
'<ul><li><a href="#_label' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li></ul>';
li3_content += '<li><a href="#_label' + i + '_' + j + '">' + $(h3_list[j]).text() + '</a></li>'; //给首页目录也加上href,链接到上面的a标签
}
var li2_content = '';
if(li3_content.length > 0)
li2_content = '<li><a href="#_label' + i + '">' + $(h2_list[i]).text() + '</a><ul>' + li3_content + '</ul></li>';
谷歌调试技巧
获取节点对象的相关节点
[JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法 - 古兰精 - 博客园](https://www.cnblogs.com/goloving/p/7183803.html
JS对象方法获取:
Document产生的对象支持以下方法
var chils= s.childNodes; //得到s的全部子节点
var par=s.parentNode; //得到s的父节点
var ns=s.nextSibling; //获得s的下一个兄弟节点
var ps=s.previousSibling; //得到s的上一个兄弟节点
var fc=s.firstChild; //获得s的第一个子节点
var lc=s.lastChild; //获得s的最后一个子节点
var elem = document.getElementById(id); //创建了一个document对象
var nodes = elem.getElementsByTagName("*");
var nodehref = nodes[i].previousSiblinghref.name;
//document.write(nodehref);
操作节点
var h2_list = $('#cnblogs_post_body h2'); #获取所有h2节点对象数组
$(h2_list[i]).before(go_to_top); #在节点前添加字符串变量go_to_top,注意$()
h2_list.length #获取h2标签数组长度
$(h1_list[i]).text() #获取节点文本
在节点后面追加节点
switch(nodes[i].nodeName)
{
case mt: //若为主标题
item = document.createElement("a");//创建节点
break;
case st: //若为子标题
item = document.createElement("a");
break;
}
//创建锚链接
var itemtext = document.createTextNode(nodetext); //将文本传递给节点
item.appendChild(itemtext);
item.setAttribute("href", "#_label" + num);
//在a节点,链接节点之后追加了空格标签
var brDiv = document.createElement('br');
item.appendChild(brDiv);//追加换行
给节点添加属性
item.setAttribute("href", "#_label" + num);
调试
document.write(nodehref); //打开独立网页打印值
alert(num); //弹出窗口打印值
console.log(num); //在浏览器控制台打印文本
console.log(nodehref, itemtext); //在浏览器控制台打印出值
js注释
单行注释
单行注释以 // 开头。
任何位于 // 与行末之间的文本都会被 JavaScript 忽略(不会执行)。
本例在每条代码行之前使用单行注释:
多行注释
多行注释以 /* 开头,以 */ 结尾。
任何位于 /* 和 */ 之间的文本都会被 JavaScript 忽略。
本例使用多行注释(注释块)来解释代码
js语法
prevall
[JQuery官方学习资料(译):遍历 - M守护神 - 博客园](https://www.cnblogs.com/liusuqi/p/3300296.html
[jQuery找兄弟系列next(),nextAll(),nextUntil(),prev(),prevAll(),prevUntil(),siblings() - BloggerYan - 博客园](https://www.cnblogs.com/shy1766IT/p/4472856.html
定义和用法
prevAll() 获得当前匹配元素集合中每个元素的前面的同胞元素,使用选择器进行筛选是可选的。
语法
.prevAll(selector)