博客园之生成侧边目录

说明:

只能适配二、三、四级目录,当存在二级标题时,以二级标题为起始,否则以三级标题为起始,向下展示一级目录.

JS代码:

<script language="javascript" type="text/javascript">
    function GenerateContentList(h23) {
        var mainContent = $('#cnblogs_post_body');
        var h2_list = $('#cnblogs_post_body').children(h23);

        if (mainContent.length < 1)
            return;

        if (h2_list.length > 0) {
            var content = '<a name="_labelTop"></a>';
            content += '<div id="navCategory">';
            content += '<p id="mylist" style="font-size:30px"><b>目录</b></p>';
            content += '<ul id="myul"><li style="text-align: right"><b id="guanbi" style="cursor: pointer">x</b></li>';
            for (var i = 0; i < h2_list.length; i++) {
                var go_to_top = '<div style="text-align: right"><a href="#_labelTop">Top~~</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>';
            if ($('#cnblogs_post_body').length != 0) {
                $($('#cnblogs_post_body')[0]).prepend(content);
            }
        }
    }

    if ($('#cnblogs_post_body h2').length > 0) {
        GenerateContentList('h2');
    } else {
        GenerateContentList('h3');
    }
    jQuery('#mylist').click(function () {
        var my_list = jQuery(this);
        var my_mulu = jQuery('#myul');
        my_list.stop();
        my_mulu.stop();
        my_list.slideUp(400);
        my_mulu.fadeIn(600);
    });
    $('#guanbi').click(function () {
        var my_list = jQuery('#mylist');
        var my_mulu = jQuery('#myul');
        my_list.stop();
        my_mulu.stop();
        my_list.slideDown(400);
        my_mulu.fadeOut(600);
    })
</script>

CSS样式:

#navCategory {
    position: fixed;
    right: 0;
    top: 100px;
    list-style: none;
    z-index: 99999;
}

#navCategory > #mylist {
    position: absolute;
    background-color: white;
     32px;
    left: -32px;
    font-size: 30px;
    font-weight: bold;
    border-radius: 5px;
    opacity: 0.8;
}

#navCategory > #myul {
    background-color: white;
    height: 400px;
     230px;
    padding-top: 5px;
    overflow: auto;
    display: none;
}

#navCategory ul, #navCategory li {
    list-style: none !important;
    margin: 5px !important;
}
原文地址:https://www.cnblogs.com/zyyhxbs/p/11421975.html