• 使用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;
            }
            
        

    实现效果可以点击这里

  • 相关阅读:
    HTML-标题
    HTML-属性
    HTML-元素
    前端 vue Request Payload VS Form Data
    JWT,Session、Cookie(httpOnly,secure) 登录认证
    js 定位当前城市(ip,省份,城市,邮编)接口定位(搜狐、新浪、百度、腾讯API)
    sqlsugar 使用汇总
    asp.net 跨域
    asp.net core程序发布(Webapi,web网站)
    .net 多线程发展1.0--4.0
  • 原文地址:https://www.cnblogs.com/wuchaodzxx/p/5524703.html
Copyright © 2020-2023  润新知