Html 哪个javascript库或框架支持;“目录”;一代

Html 哪个javascript库或框架支持;“目录”;一代,html,javascript,javascript-framework,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 链接到标题的行以及原始htm

我正在寻找从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
链接到标题的行以及原始html都应该返回并插入锚

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


如果他们都没有,有人看到过一个好的JS模块吗?

是你的朋友,有这个插件:。主页是

是您的朋友,使用此插件:。主页是

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

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

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

添加一个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>

var el=document.getElementsByTagName(“*”)||[];
var toc=“
    ”; var-lvl=1; 对于(变量i=0;i n) { 而(lvl-->n)toc+=“
”; }否则如果(lvl”; toc+=“”; getElementById(“目录”)。 innerHTML=toc;

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

自己制作,我写的:),希望有帮助

添加一个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>

var el=document.getElementsByTagName(“*”)||[];
var toc=“
    ”; var-lvl=1; 对于(变量i=0;i n) { 而(lvl-->n)toc+=“
”; }否则如果(lvl”; toc+=“”; getElementById(“目录”)。 innerHTML=toc;

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

发布您希望从中生成目录的html。这是任何大型库中的10行脚本。只需使用h1、h2……标记。我在问题中插入了一个示例。发布您希望从中生成目录的html。这是任何bi中的10行脚本g库。只应使用h1、h2,…标记。我在问题中插入了一个示例。使用getElementsByTagName不起作用-因为您将对每个元素类型进行集群,而不是按交错顺序获取它们…并且已经有足够多的评论说明了使用正则表达式解析HTML的危险。使用getElementsByTagName不起作用——因为你会对每个元素类型进行集群,而不是按交错顺序进行……而且已经有足够多的评论指出了用正则表达式解析HTML的危险性。