在每次迭代中获取元素

Getting the element on each iteration.

本文关键字:获取 元素 迭代      更新时间:2023-09-26

我有一个列表,可能会也可能不会显示在屏幕上。我现在要做的是检查列表中的所有li是否可见。如果li确实可见,那么我希望迭代停止,然后获取特定的元素。

我的尝试:-

var getList = $("ul li").each(function(){
                                    return $(this).is(":visible") ? false: true; 
                                    });

根据我对上面代码的理解,它从"ul-li"选择器中获取数组,并使用函数each进行迭代。每当我注意到元素可见时,我就需要中断迭代,以便返回false以退出循环。

所以,现在的问题是,我不知道如何找回那个元素。我已经到了一个地步,我可以停在想要的元素上,然后被困在那里。

您可以简单地执行以下操作:

var $firstVisible = $('ul li:visible').first();

edit—按照@elcranrs对这个特殊问题的回答去做;下面的内容适用于当你无法使用巧妙的内置选择器技巧时。


您可以让回调设置一个变量:

var visibleOne;
$("ul li").each(function(){
  if ($(this).is(':visible')) {
    visibleOne = this; // or $(this) if you prefer
    return false;
  }
});

如果你不喜欢混乱的局部变量,你可以把整个事情打包成一个jQuery插件:

$.fn.findVisible = function() {
  var rv;
  this.each(function() {
    if ($(this).is(':visible')) {
      rv = $(this);
      return false;
    }
  });
  return rv;
};

然后:

var visibleOne = $('ul li').findVisible(); // either undefined or a new jQuery object

$.is()返回布尔值,因此:

CCD_ 2是不必要的。

如果您想返回元素,请按如下方式形成条件:

$("ul li").each(function(){
  if($(this).is(":visible")) {
    return $(this);
  } 
});

在此处使用return将打破循环。当使用循环来提取匹配的结果时,这是一种常见的做法,如下所示:

var matched = [];
$("ul li").each(function(){
  if($(this).is(":visible")) {
    matched.push($(this))
  } 
});

这将把每个:visible元素添加到匹配的数组中,该数组现在可以用于您需要的任何内容:)

编辑-

我错过了你上面的一行:"如果li确实可见,那么我希望迭代停止,然后得到那个特定的元素。"这意味着使用$.first()的答案非常可靠。