JQuery:从.each()选择器中排除元素?

时间:2013-02-15 02:06:13

标签: javascript jquery jquery-selectors

我想遍历3个嵌套<ul>中包含的一系列菜单项,但只从第2层嵌套<li>中检索.HTML(),例如:

<ul>
<li><a href="#">Ignore</a></li>
<li><a href="#">Ignore</a></li>
<li><a href="#">Ignore</a>
   <ul>
   <li><a href="#">Retrive me</a></li>
   <li><a href="#">Retrive me</a></li>
   <li><a href="#">Retrive me</a>
       <ul>
       <li><a href="#">Ignore</a></li>
       <li><a href="#">Ignore</a></li>
       <li><a href="#">Ignore</a></li>
       </ul>
   </li>
   </ul>
</li>
</ul>

通常我会使用.not()例如:

$.each($("#menu ul li ul li a").not("#menu ul li ul li ul li a"), function() {
  var linktext = $(this).html();
  console.log(linktext);
});

但是这仍然会从第2级和第3级返回所有.html()标签。

有人会知道如何修改这个吗?

1 个答案:

答案 0 :(得分:3)

您可以使用child selector [docs]

$("#menu > ul > li > ul > li > a").each(...);

或者计算一下祖先li's的数量,尽管这可能不那么高效:

$('#menu ul a').filter(function() {
    return $(this).parentsUntil('#menu', 'li').length === 2;
}).each(...);