jquery - 如何在jquery中对嵌套的li进行编号

标签 jquery html counter nested-lists html-lists

我尝试对嵌套列表中的所有链接进行编号,编号应该放在“data-nav-no”属性中,结果应该是这样的:

<ul class="mainNav">
    <li><a href="#startseite" data-nav-no="1">Startseite</a></li>
    <li><a href="#ueber-uns" data-nav-no="2">Über uns</a></li>
    <li><a href="#leistungen" data-nav-no="3">Leistungen</a>
        <ul class="subNav">
            <li><a href="#langfristige-unterstuetzung" data-nav-no="4">Langfristige Unterstützung</a></li>
            <li><a href="#punktuelle-unterstuetzung" data-nav-no="5">Punktuelle Unterstützung</a></li>
        </ul>
    </li>
    <li><a href="#referenzen" data-nav-no="6">Referenzen</a></li>
    <li><a href="#news" data-nav-no="7">News</a></li>
    <li><a href="#kontakt" data-nav-no="8">Kontakt</a></li>
</ul>

我试过这个:

$("ul.mainNav li, ul.subNav li").each(function() {
    var index = $(this).index();    
    $(this).children("a").attr('data-nav-no',index);
});

有效,但在第二个列表级别中,数字再次以“0”开头。有解决这个问题的想法吗?

最佳答案

下面应该做你想做的:

$("ul.mainNav li").each(function(i) {
    $(this).children("a").attr('data-nav-no',i)
});

选择器 ul.mainNav li 正在寻找所有 liul.mainNav 的后代;其中包括与选择器ul.subNav li匹配的元素。这就是为什么我在示例中省略了 ul.subNav li 选择器。如果您希望定位ul.mainNav 元素的children,那么您应该使用child selector。而不是 descendant :

$("ul.mainNav > li, ul.subNav > li").each(function(i) {
    $(this).children("a").attr('data-nav-no',i)
});

.index()您使用的方法返回元素相对于其同级元素的位置,其中 - 作为 .each() 提供的 index 参数是元素在 jQuery 集合中的位置。

关于jquery - 如何在jquery中对嵌套的li进行编号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7359219/

相关文章:

javascript - html jquery 函数对 keydown 事件不起作用?

php - 如何使用 CSS 和 Jquery 更改事件链接的颜色

html - 仅针对具有媒体查询的智能手机

html - 将偏移应用于右侧的列 - ionic 网格

打印(或 PDF)输出中的 CSS 页面计数器

javascript - 如何使用 jquery 将数据更新到外部 json 文件中?

javascript - jquery Slidebar 在 IE 中不工作

javascript - 由 html 空格引起的非常奇怪的错误

c++ - 计算字符串中的字母序列 - C++

c++ - 为什么 int count 在进入循环时从 1 跳到 4? C++