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

发布于 2024-12-03 17:42:32 字数 1193 浏览 2 评论 0原文

我尝试对嵌套列表中的所有链接进行编号,该编号应位于“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”又。有什么想法可以解决这个问题吗?

I try do number all links in a nested list, the number should go in the "data-nav-no" attribute, the result should be like this:

<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>

I tried this:

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

Works, but in the second list level the number starts with "0" again. Any ideas to solve that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

抱猫软卧 2024-12-10 17:42:32

以下内容应该执行您想要的操作:

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

选择器 ul.mainNav li 正在查找作为 ul.mainNav 后代的所有 li;其中包括由选择器ul.subNav li匹配的元素。这就是为什么我在示例中省略了 ul.subNav li 选择器。如果您只想定位ul.mainNav元素的子元素,那么您应该使用子选择器 而不是 后代

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

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

The following should do what you want:

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

The selector ul.mainNav li is finding all lis that are descendants of ul.mainNav; which includes the elements matched by the selector ul.subNav li. This is why I've omitted the ul.subNav li selector from my example. If you want to only target the children of the ul.mainNav element, then you should use the child selector instead of the descendant:

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

The .index() method you were using returns the position of the element relative to it's sibling elements, where-as the index parameter provided by .each() is the position of the element in the jQuery collection.

懵少女 2024-12-10 17:42:32

一个简单的更改就足够了:

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

重要的细节是您不想尝试自己计算 index ,而只需使用 each 传递到回调函数中的内容。

查看实际操作(该示例更改 HTML 以使结果可见)。

A simple change will be enough:

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

The important detail is that you don't want to try to compute the index yourself, but just use what each passes into your callback function.

See it in action (the example changes the HTML to make the results visible).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文