如何在jquery中对嵌套的li进行编号
我尝试对嵌套列表中的所有链接进行编号,该编号应位于“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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
以下内容应该执行您想要的操作:
选择器
ul.mainNav li
正在查找作为ul.mainNav
后代的所有li
;其中包括由选择器ul.subNav li
匹配的元素。这就是为什么我在示例中省略了ul.subNav li
选择器。如果您只想仅定位ul.mainNav
元素的子元素,那么您应该使用子选择器 而不是 后代:.index()
方法返回元素相对于其同级元素的位置元素,其中 - 作为.each()
index 参数> 是元素在 jQuery 集合中的位置。The following should do what you want:
The selector
ul.mainNav li
is finding allli
s that are descendants oful.mainNav
; which includes the elements matched by the selectorul.subNav li
. This is why I've omitted theul.subNav li
selector from my example. If you want to only target the children of theul.mainNav
element, then you should use the child selector instead of the descendant:The
.index()
method you were using returns the position of the element relative to it's sibling elements, where-as theindex
parameter provided by.each()
is the position of the element in the jQuery collection.一个简单的更改就足够了:
重要的细节是您不想尝试自己计算
index
,而只需使用each
传递到回调函数中的内容。查看实际操作(该示例更改 HTML 以使结果可见)。
A simple change will be enough:
The important detail is that you don't want to try to compute the
index
yourself, but just use whateach
passes into your callback function.See it in action (the example changes the HTML to make the results visible).