Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在每次迭代中获取元素。_Javascript_Jquery - Fatal编程技术网

Javascript 在每次迭代中获取元素。

Javascript 在每次迭代中获取元素。,javascript,jquery,Javascript,Jquery,我有一个列表,它可能显示在屏幕上,也可能不显示在屏幕上。我现在要做的是检查列表中的所有li是否可见。如果li确实是可见的,那么我希望迭代停止,然后得到那个特定的元素 我的尝试: var getList = $("ul li").each(function(){ return $(this).is(":visible") ? false: true; }

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

我的尝试:

var getList = $("ul li").each(function(){
                                    return $(this).is(":visible") ? false: true; 
                                    });
根据我对上述代码的理解,它从ulli选择器获取数组,并使用每个函数进行迭代。每当我注意到元素是可见的,我就需要中断迭代,以便返回false以退出循环

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

编辑-按照@elclanrs对这个特定问题的回答去做;下面是当你不能用一个聪明的内置选择器技巧来做这件事的时候。 您可以将回调设置为变量:

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;
};
然后:

编辑-按照@elclanrs对该特定问题的回答进行操作;下面是当你不能用一个聪明的内置选择器技巧来做这件事的时候。 您可以将回调设置为变量:

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 $firstVisible = $('ul li:visible').first();

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

var $firstVisible = $('ul li:visible').first();
$.is返回布尔值,因此:

返回$this。是否:可见?假:真;这是不必要的

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

$("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的答案非常可靠。

$.is返回一个布尔值,因此:

返回$this。是否:可见?假:真;这是不必要的

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

$("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的答案非常可靠。

Wow。抱歉@Pointy我几乎把你的回答标记为正确的,但这..这就是genius.Or var firstVisible=$'ul li:visible:eq0';我不知道,但我怀疑会有任何可测量的差异。哇。抱歉@Pointy我几乎把你的回答标记为正确的,但这..这就是genius.Or var firstVisible=$'ul li:visible:eq0';我不知道,但我怀疑会有任何可测量的差异。