首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带插件的jQuery toc生成

不带插件的jQuery toc生成
EN

Stack Overflow用户
提问于 2012-10-09 15:34:06
回答 2查看 542关注 0票数 1

我想用jQuery为html文档生成一个友好的toc --不使用任何插件。我刚刚开始学习/提高我的jQuery技术。

HTML输入:

代码语言:javascript
复制
<div id="toc"></div>
<h3><a name="construction-block"></a>Construction Block</h3><p>...</p>
<h3><a name="construction-box"></a>Construction Box</h3><p>...</p>
...

JS:

代码语言:javascript
复制
$(document).ready(function(){
$("#toc").append('<p>table of contents:</p>');
$("h3").each(function(i) {
    var current = $(this);
    $("#toc").append("<h3>"+current.html()+"</h3>");
});
})

HTML输出

代码语言:javascript
复制
<div id="toc">
<p>table of contents:</p>
<h3>
<a name="construction-block"></a>
Construction Block
</h3>
<h3>
<a name="construction-box"></a>
Construction Boxk
</h3>
</div>

这只是部分成功。

所需的HTML输出

代码语言:javascript
复制
<div id="toc">
<p>table of contents:</p>
<h3>
<a href="#construction-block">Construction Block</a>
</h3>
<h3>
<a href="#construction-box">Construction Box</a>
</h3>
</div>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-09 15:49:18

我建议如下(考虑到HTML中的一些更改):

代码语言:javascript
复制
$('<p />', {
    'text': 'Table of contents'
}).appendTo('#toc');
$('<ol />').appendTo('#toc');

$('h3').each(
    function() {
        var that = this,
            $that = $(that),
            a = $('<a />', {
                'href': '#' + that.id,
                'text': $that.text()
            }),
            li = $('<li />').append(a).appendTo('#toc ol');
    });​

此jQuery创建一个有序列表(本质上是目录的语义定义),并将h3元素的文本附加到新创建和附加的list-items中的新a元素。

超文本标记语言的变化是删除了<a>元素,因为可以(也应该)使用id而不是命名锚点(这在IE中也是有效的)。

新的HTML:

代码语言:javascript
复制
<div id="toc"></div>
<h3 id="construction-block">Construction Block</h3>
<p>...</p>
<h3 id="construction-box">Construction Box</h3>
<p>...</p>

JS Fiddle demo

我直到现在才想到这一点,但即使在h3元素上没有id属性,也可以实现同样的效果,只需使用jQuery创建相关的id属性即可:

代码语言:javascript
复制
$('<p />', {
    'text': 'Table of contents'
}).appendTo('#toc');
$('<ol />').appendTo('#toc');

$('h3').each(
    function(i,el) {
        var $that = $(el),
            text = $that.text(),
            id = text.toLowerCase().replace(/\s+/,'-');
        el.id = id;
        var a = $('<a />', {
            'href' : '#' + id,
            'text' : text
        }),
            li = $('<li />').append(a).appendTo('#toc ol');
    });​

JS Fiddle demo

参考文献:

票数 3
EN

Stack Overflow用户

发布于 2012-10-09 15:39:33

代码语言:javascript
复制
$("#toc").append("<h3>").text(current.html());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12794995

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档