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

Posted 且听风吟-wuchao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用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;
        }
        
    

实现效果可以点击这里

 

以上是关于使用JavaScript代码为博客园个人博客页面自动添置目录的主要内容,如果未能解决你的问题,请参考以下文章

博客园定制页面——使用自定义JS脚本(公告栏显示时间)

博客园个人界面美化(初入博客园)

博客园自定义页面风格设计

博客园样式自定义(待更新)

优化博客园的JS代码总结

个人博客自定义样式