哪个javascript库或框架支持“Table Of Content”一代?

时间:2009-05-22 00:28:38

标签: html javascript javascript-framework

我正在寻找一个来自HTML(带锚点)的动态“目录”生成的javascript。

示例:

<h1>First level1 heading</h1>
lorem ipsum
<h2>1a heading</h2>
lorem ipsum
<h2>1b heading</h2>
lorem ipsum
<h1>Second level1 heading</h1>
lorem ipsum

应该返回类似

的内容
 First level1 heading   
   1a heading   
   1b heading 
 Second level1 heading

链接到标题的行,并且还应该在插入锚点的情况下返回orignal html。

其中一个大型javascript库或框架中是否包含某些内容?

如果没有,有人为此目的看过一个好的JS模块吗?

3 个答案:

答案 0 :(得分:4)

jQuery是您的朋友,使用此插件:table of contents。主页为http://code.google.com/p/samaxesjs/

答案 1 :(得分:1)

自己动手,我写了:),希望有所帮助

添加div元素作为body元素的第一个子元素,并将id设为“tableOfContents”

并将下面的脚本添加为body元素的最后一个子元素

<script>
    var el = document.getElementsByTagName("*") || [];
    var toc = "<ul>";
    var lvl = 1;
    for(var i=0;i<el.length;i++)
    {
        var ce = el[i];
        var tag = ce.tagName + "";
        var m = tag.match(/^h([1-5])$/i);
        if(m)
        {
            var n = Number(m[1]);
            if(lvl > n)
            {
                while(lvl-->n)toc+="</ul></li>";  
            }else if(lvl < n){
                while(lvl++<n)toc+="<li style='list-style:none'><ul>";
            }
            toc +=  '<li><a href="#toc_' + i + '">' + 
                    (ce.innerText || ce.text()) +
                    '</a></li>';
            var ta = document.createElement("div");
            ta.innerHTML = '<a name="toc_' + i + '" />';
            ce.insertBefore(ta, ce.firstChild);
        }
    }
    while(lvl-->1)toc+="</ul></li>";
    toc+="</ul>";
    document.getElementById("tableOfContents").
        innerHTML = toc;
</script>

此脚本将检测每个H(1到5)并生成目录

答案 2 :(得分:-1)

这是一个非常简单的问题,可以用10-20线功能解决。不需要框架。使用getElementsByTagName('h1'),getElementsByTagName('h2')或使用正则表达式来遍历DOM。加载框架会带来性能影响和风险,因此我建议不要为简单问题安装一个。