javascript - 获取each()循环中的最后一项

标签 javascript jquery for-loop each

我正在努力理解如何获取each()循环中的最后一项。我上周就这个主题提出了一个问题,可以在这里看到:.find() relationship with loops, each() and this keyword - .find() returning 4 when it should only be 2

最初的需求是检查uls里面的一系列uls,如果有超过1个列表我需要添加一个类。现在 - 我需要在此代码的基础上构建,如果 div 内有超过三个列表,它是系列中的最后一个 ul,我还需要向最后一个 ul 添加一个类。

我对这个主题进行了研究,并将引用这个答案:Last element in .each() set

作为引用,第一个示例案例如下:

$(function(e) {
  var getMenuItems = $(".item");
  getMenuItems.each(function( index ) {
  	if ($(this).find("ul.sub-menu").length > 0) {
      $(this).addClass("red");
    }
  });
});
.red {background-color: red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="item">
    <a href="#"></a>
    <ul class="sub-menu">
        <li></li>
    </ul>
   </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
    <ul class="sub-menu">
        <li></li>
    </ul>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
</ul>

此代码仅检查 div 内是否有超过 1 个列表,以及是否添加一个类。

现在,下一步不仅要向具有超过 1 个列表的 div 添加类,还要向该系列中的最后一个 ul 添加类,无论列表的数量有多少。答案Last element in .each() set建议简单地交叉引用 index 并查看是否位于最后一项。

得票最高的答案是:

Check index against the length of the set and you're good to go:

集成到我的示例中的概念如下所示:

$(function(e) {
  var getMenuItems = $(".item");
  var howManyListItems = getMenuItems.length;
  getMenuItems.each(function( index ) {
  	if ($(this).find("ul.sub-menu").length > 0) {
      $(this).addClass("red");
    } else if (index == (howManyListItems.length - 1)) {
      console.log($(this));
      $(this).addClass("red");
    }
  });
});
.red {background-color: red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="item">
    <a href="#"></a>
    <ul class="sub-menu">
        <li></li>
    </ul>
   </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
    <ul class="sub-menu">
        <li></li>
    </ul>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
</ul>

预期/期望的行为是将红色添加到最后一项,但遗憾的是这没有发生。

可以将其视为一种故障排除措施,控制台将其记录到该条件中不会返回任何内容。那么这不是数组的最后一项吗?您将如何修改它/定位它?这个条件代表什么?由于控制台日志记录不执行任何操作,因此如何解决此代码的问题?

如何点击每个循环中的最后一个元素并修改它的 DOM 属性?

最佳答案

这很简单:

$(function(e) {

  $(".sub-menu:last-of-type").last().addClass("red");
  
});
.red {background-color: red;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li class="item">
    <a href="#"></a>
    <ul class="sub-menu">
        <li></li>
    </ul>
   </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
    <ul class="sub-menu">
        <li></li>
    </ul>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
  <li class="item">
    <a href="#"></a>
  </li>
</ul>

关于javascript - 获取each()循环中的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53620172/

相关文章:

javascript - 如何将 HTML 中的图像覆盖在 CSS 中的文本上

javascript - 结合 for 循环与 setInterval()

java - 设置迭代器的 Java 泛型

javascript - 三、形状从绿色到红色

javascript - :after element not getting positioned over div

jquery - 使用 javascript 而非常规 anchor 移动到我网站中的其他页面

python - 加速 Numpy 数组的迭代

javascript - 通过引用交换对象中的数组元素

javascript - 如何通过js禁用网络摄像头?

javascript - WordPress 中链接 php 和 javascript 错误