使用JavaScript代码为博客园个人博客页面自动添置目录

  当我们在博客中写的东西比较多,或者文章层次比较明显,有很多层次结构,这时如果没有目录导航,将特别难以阅读。博客园有着非常个性化的个人定制功能,可以通过添加js代码实现这个功能,由于对jquery不熟,因此采用原生js来做的。考虑到一般使用二级目录就够了,因此代码只实现到二级目录。也可以很方便的更改代码,实现更多级别。

  另外,当页面滚动到后面时,再返回目录区域也很累,因此在右下加添加了一个返回目录的按钮,随着页面往下滚动,按钮出现并固定。

  以下贴上代码:

        //函数实现在父节点的最前面插入新的节点
    function prependChild(parent,newChild){
        if(parent.firstChild){
            parent.insertBefore(newChild,parent.firstChild);
        } else {
            parent.appendChild(newChild);
        }

        return parent;
}
        //var home = document.getElementById("home");

        //var documents = document.getElementsByTagName("h1");
        var con =document.getElementById("cnblogs_post_body");
        var headTags = con.getElementsByTagName("h1");
        var L = headTags.length;
        var titleContent = document.createElement("div");//标题存放区

        titleContent.setAttribute("style","border:1px solid #999;");
        titleContent.setAttribute("id","titleContent");
        var titleTag = document.createElement("div");//显示目录字样
        titleTag.innerHTML="<div style=‘font-size:20px;‘><strong>目录</strong></div> <br/>"

        titleContent.appendChild(titleTag);

        var titleOl = document.createElement("ol");//标题存放区
        var tagName = "H1_";
        for(var i=0;i<L;i++){
            //tagName=tagName+i;
            ////////////////////////////这里写主要代码
            headTags[i].setAttribute("id",tagName+i);

            var headNode = document.createElement("li");//当前标题节点
            var hrefNode =  document.createElement("a");
            hrefNode.setAttribute("href","#"+tagName+i);
            hrefNode.innerHTML = headTags[i].innerHTML;
            headNode.appendChild(hrefNode);
            /////查找二级标题
                var titleOl_2 = document.createElement("ol");//二级标题存放区
                var flag=0;
                var nextNode = headTags[i].nextSibling;
                while(true){

                    if(nextNode==null||nextNode==undefined){

                        break;
                    }
                    if(nextNode.nodeName=="H1"||nextNode.nodeName=="h1"||nextNode.nodeName== undefined ||nextNode.nodeName== null){

                        break;
                    }
                    if(nextNode.nodeName=="H2"||nextNode.nodeName=="h2"){
                        flag=flag+1;
                        ////////////////插入二级标题
                        nextNode.setAttribute("id",tagName+i+"_"+flag);
                        var headNode2 = document.createElement("li");//当前标题节点
                        var hrefNode =  document.createElement("a");
                        hrefNode.setAttribute("href","#"+tagName+i+"_"+flag);
                        hrefNode.innerHTML = nextNode.innerHTML;
                        headNode2.appendChild(hrefNode);

                        titleOl_2.appendChild(headNode2);
                        ////////////////
                    }
                    nextNode = nextNode.nextSibling;

                }
                if(flag>0){
                    headNode.appendChild(titleOl_2);
                }
            /////

            titleOl.appendChild(headNode);

        }
        if(L<=0){
            titleContent.setAttribute("style","display:none;");
        }
        titleContent.appendChild(titleOl);
        prependChild(con,titleContent);

        ///////////////////下面实现返回目录按钮
        var goTopTag = document.createElement("a");
        goTopTag.setAttribute("style","margin-top:20px;position:absolute;");
        goTopTag.setAttribute("href","#titleContent");
        goTopTag.innerHTML="返回目录";
        var sideBar = document.getElementById("sideBar");
        sideBar.appendChild(goTopTag);
        window.onscroll = function(){
            if(getScrollTop()>=1400){
                goTopTag.setAttribute("style","margin-top:"+(getScrollTop()-1400+20)+"px;position:absolute;");
            }
            //goTopTag.innerHTML=getScrollTop();
        }
        function getScrollTop()
        {
            var scrollTop=0;
            if(document.documentElement&&document.documentElement.scrollTop)
            {
                scrollTop=document.documentElement.scrollTop;
            }
            else if(document.body)
            {
                scrollTop=document.body.scrollTop;
            }
            return scrollTop;
        }

实现效果可以点击这里

时间: 2024-08-05 16:23:32

使用JavaScript代码为博客园个人博客页面自动添置目录的相关文章

博客园美化博客随笔目录

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

网络采集软件核心技术剖析系列(1)---如何使用C#语言获取博客园某个博主的全部随笔链接及标题

一 本系列随笔概览及产生的背景 自己开发的豆约翰博客备份专家软件工具问世3年多以来,深受广大博客写作和阅读爱好者的喜爱.同时也不乏一些技术爱好者咨询我,这个软件里面各种实用的功能是如何实现的. 该软件使用.NET技术开发,为回馈社区,现将该软件中用到的核心技术,开辟一个专栏,写一个系列文章,以飨广大技术爱好者. 本系列文章除了讲解网络采编发用到的各种重要技术之外,也提供了不少问题的解决思路和界面开发的编程经验,非常适合.NET开发的初级,中级读者,希望大家多多支持. 很多初学者常有此类困惑,“为

是用博客园发表博客是如何上传本地图片

之前写了一篇带有图片的文章,我是直接从Word文档copy过来的,结果发现图片没有,找了很多资料,都说的很麻烦,最后还是自己找到了一简单方法, 这样,你的图片就可以上传了! 是用博客园发表博客是如何上传本地图片

我在博客园开博了

2019年1月15日,我在博客园开博了.虽然注册博客园很久了,但是直到今天才申请开博,很庆幸. 希望从今天开始,自己能够坚持记录在学习IT的路上的点点滴滴,记录每天学习所得以及走过的每条弯路. 原文地址:https://www.cnblogs.com/bitterain/p/10270525.html

利用GitHook实现博客园文章的备份和自动发布

在使用vscode中的writecnblog插件时有所启发,链接: 用vscode写博客和发布,大家可以看看. 我们在本地可以利用git轻松实现博客园文章的历史记录管理,利用博客园的MetaWeblog API 别人的介绍编写小程序来自动化上传文章(参考插件). 更进一步,将这个程序放到githook里,每次commit时自动执行,就实现了现博客园文章的备份和自动发布. 这样,你每次发布文章的步骤就简化为: 编写本地一个Git仓库内的xx.md文件 commit更改 程序会自动获取diff,然后

利用GitHook实现博客园文章的备份和自动发布.md

在使用vscode中的writecnblog插件时有所启发,链接: [用vscode写博客和发布](https://www.cnblogs.com/caipeiyu/p/5475761.html),大家可以看看. 我们在本地可以利用git轻松实现博客园文章的历史记录管理,利用博客园的MetaWeblog API [别人的介绍](https://www.cnblogs.com/caipeiyu/p/5354341.html)编写小程序来自动化上传文章(参考插件). 更进一步,将这个程序放到gith

博客园加上博客精灵

以前玩wordpress就喜欢这个博客精灵,现在给我博客园也加个这个,萌萌哒! 下面是教程 1. 准备好两个文件(右键另存) spig.js spig.png 2. 然后添加代码 CSS代码 .spig {display:block;width:175px;height:246px;position:absolute;bottom: 300px;left:180px;z-index:9999;} #message{color :#191919;border: 1px solid #c4c4c4;

如何在博客园发博客时插入优酷视频

操作步骤如下: 1. 在优酷视频页面,点击“转发到”右边的“更多”按钮. 2. 复制html代码文本框中的内容 3. 进入博客园博客后台编辑器,点击“插入/编辑嵌入式媒体”按钮. 4. 在打开的窗口中选择“源代码”标签,将之前在优酷网站上复制的html代码粘贴过来. 5. 点击“插入按钮”就完成了优酷视频的添加. from: http://www.cnblogs.com/cmt/archive/2012/06/27/youku_insert_video.html

给博客园的博客文章设置行高,让博客文字不再拥挤

若使用博客园模板的默认样式,文字是相当拥挤的.如下图: 解决办法: [1]点击导航下的[管理] [2]进入后台界面后,点击[设置] [3]进入设置界面后,找到[页面定制CSS代码],并进行如下输入: #cnblogs_post_body p { line-height: 2; } [4]代码输入完成后,在页尾处找到[保存],并点击 [5]处理之后,文字终于有了行高. [6]当然,还可以通过控制台查看标签,进行进一步的样式设置. 但如果仅要求增加文章行高的话,就是以上操作……