为博客添加目录

主要参考来源:http://www.cnblogs.com/xuehaoyue/p/6650533.html#_labelTop



在文章左边角添加目录导航

1. 申请开通js权限

    默认是不支持,需要打开博客园后台,进入“设置”标签页,点击“申请开通js权限”,并注明用途

    如果想加快申请速度,也可以再向官方发个邮件(邮箱是[email protected]),邮件也需要注明用途,快的话1小时就能搞定了

2. 添加css代码到“页面定制CSS代码”

/*生成博客目录的CSS*/
#uprightsideBar{
    font-size:12px;
    font-family:Arial, Helvetica, sans-serif;
    text-align:left;
    position:fixed;/*将div的位置固定到距离top:50px,left:0px的位置,这样div就会处在最左边的位置,距离顶部50px*/
    top:320px;
    left: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;
}
/*以上是博客导航目录的样式-----------------------------------------------------------------------------------------------------------------------*/

3. 添加js脚本到“页首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.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>

4. 按格式写文章

    在写博文的时候,将标题设定为h2或h3,就会自动生成目录了。(对应普通编辑器中的二级标题和三级标题,也对应markdown中的##和###)。

    以前发布的文章如果有h2,h3,也会自动生成目录索引。

时间: 2024-07-30 16:01:31

为博客添加目录的相关文章

为博客添加目录的配置总结

转载自:http://www.cnblogs.com/jiangz/p/3734968.html 最近在博客园上看到了用html/javascript实现添加目录的方法(http://www.cnblogs.com/xdp-gacl/p/3718879.html#2937655),想按照作者的方法进行一下配置,发现不行.经过一番学习,现在总算是配置好了,在我的chrome 34下可以看到目录(如下图所示).我把我配置过程中做的修改按顺序记录在这里,供大家参考. 一.申请js权限 根据管理页面的说

hexo next主题为博客添加分享功能

title: hexo next主题为博客添加分享功能 date: 2018-01-06 20:20:02 tags: [hexo博客, 博客配置] categories: hexo next主题配置 --- 今天心血来潮,决定给博客添加分享功能,百度上首先是找到了使用shareSDK的分享功能,最后在实践的过程中发现它添加时步骤比较多,添加完成后效果比较丑(就是一个长条的浅蓝色按钮),而且点击后想要退出分享比较麻烦(它的取消按钮实在太难找了,它在页面最下方的位置,呈现浅灰色,这个设计太反人类了

博客园目录导航 持续更新中~~

目录 博客园目录导航 python语言学习 python基础入门 python函数 python模块 python面向对象 网络编程 并发编程 Mysql数据库 初识数据库 mysql数据库安装 mysql支持数据类型 SQL语句 mysql约束 单表多表查 SQL注入风险 web前端 HTML CSS JavaScript Vue jQuery Bootstrap Django框架 Flask框架 算法 爬虫 人工智能 博客园装饰 博客园目录导航 python语言学习 python基础入门 计

博客园美化博客随笔目录

博客园美化博客随笔目录 基于孤傲苍狼在2014-5-11写的目录代码基础上进行改进 一.js代码 <!--目录--> <script type="text/javascript"> var BlogDirectory = { /* 获取元素位置,距浏览器左边界的距离(left)和距浏览器上边界的距离(top) */ getElementPosition:function (ele) { var topPosition = 0; var leftPosition

给博客添加Flash时钟

依稀记得在cnblogs很多大牛的博客里见到过大牛的新闻公告栏里那种动感十足的Flash时钟控件,先上图: 作为一名刚的接触博客菜鸟,自然免不了一番好奇.博客设置选项里翻来覆去找(以为是cnblogs自带的功能...),主题样式换了好几个,就是找不到带Flash样式的.不过倒是在设置里找到个“博客侧边栏公告”的东东,如图所示. 想起刚上大学那会大家在网上搜免费的QQ空间主题js代码的经历,感觉突破口就是它了.稍稍问了一下度姑娘,还真找到了解决方案,总结如下: 1.添加object标签 既然说支持

为你的WordPress博客添加CSS3炫酷读者墙

为你的WordPress博客添加CSS3炫酷读者墙,也就是把你文章的评论最活跃的读者显示在单独的一个页面,先看看效果吧: 1.复制主题的page.php,另存为readerwall.php,然后在其顶部添加代码 1 2 3 4 5 < ?php /* Template Name: Reader wall */ ?> 2.接着改文件下面找到 1 < ?php the_content('');?> 在它的前面添加下面的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 1

团队Alpha博客链接目录

团队Alpha博客链接目录 人月神教-α阶段冲刺报告(1/12) 人月神教-α阶段冲刺报告(2/12) 人月神教-α阶段冲刺报告(3/12) 人月神教-α阶段冲刺报告(4/12) 人月神教-α阶段冲刺报告(5/12) 人月神教-α阶段冲刺报告(6/12) 人月神教-α阶段冲刺报告(7/12) 人月神教-α阶段冲刺报告(8/12) 人月神教-α阶段冲刺报告(9/12) 人月神教-α阶段冲刺报告(10/12) 人月神教-α阶段冲刺报告(11/12) 人月神教-α阶段冲刺报告(12/12) 团队git

杨泽业:给你的wordpress博客添加经典语录功能,适合所有php网站

我们做一个网站就是要不断给访客提供最佳的用户体验,同时提升自己的品牌价值,而文章结束的经典语录的功能,完全可以实现我们所要达到的效果.(如下图) 给你的wordpress博客添加经典语录功能 这个是怎样实现的呢?其实很简单,下面我就将核心文件和代码分享给大家. 第一步:添加语录功能的核心文件. 在网站的根目录里面添加一个yulu的文件夹,里面含有index.php和yulu.txt两个文件.其中index.php里面是核心代码,yulu.txt是要显示的经典语录,一条占用一行. 文末免费给出了所

杨泽业:给你的wordpress博客添加SMTP邮件服务,评论以后邮件通知

当你的博客有人评论的时候,就会收到邮件通知,那是非常好的体验,有人评论了自己第一时间知晓.特别是,有人在你的博客留言,需要有人解答问题的时候,这个人是迫切的需要及时通知的,有的评论自动邮件通知的话,那么就轻松了. 要实现评论邮件通知,还是不难的.下面,我就说说,使用腾讯的免费企业邮箱配置SMTP邮件服务.(没有企业邮箱的请查看我上一个文章<用你自己的域名免费的开通腾讯企业邮箱图文教程>) 先在模板函数 (functions.php)文件底部添加下面代码即可,邮箱的帐号密码改成自己的帐号密码.