2009-05-22 26 views
0

我正在寻找从HTML(带锚)飞行“表内容”生成的JavaScript。哪个javascript库或框架支持“Table Of Content”生成?

例子:

<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 

与链接到标题行,也是一部开拓创新的HTML应插入锚被退回。

是否有东西包含在一个大的JavaScript库或框架?

如果他们都没有,有人看到一个很好的JS模块为此目的?

+0

后您希望从生成的内容表中的HTML。这是任何大型图书馆的10行脚本。 – 2009-05-22 00:32:17

+0

只应使用h1,h2,...标签。我在问题中插入了一个例子。 – user89021 2009-05-22 00:42:56

回答

-1

这是一个非常简单的问题,可以通过10-20行函数来解决。没有框架要求。或者使用getElementsByTagName('h1'),getElementsByTagName('h2')或使用正则表达式来操作DOM。加载框架带有性能影响和风险,所以我建议不要为简单问题安装一个框架。

1

自己去创造它,我写的:),希望它有助于

添加一个div元素作为主体元素的第一个孩子,并给一个id为“tableOfContents”

,并添加以下作为最后的脚本体元素的子

<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),并生成表的内容