簡體   English   中英

在每次迭代中獲取元素。

[英]Getting the element on each iteration.

我有一個列表,它可能會或可能不會顯示在屏幕上。 我現在要做的是檢查該列表中的所有li是否可見。 如果li確實可見,那么我希望停止迭代,然后獲取該特定元素。

我的嘗試:

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

根據我的理解,上面的代碼是什么,它從“ ul li”選擇器獲取數組,並分別對函數進行迭代。 每當我注意到該元素可見時,就需要中斷迭代,以便返回false來退出循環。

所以,現在的問題是我不知道如何找回那個元素。 我到了可以停在想要的元素並卡在那兒的地步。

您可以簡單地做到這一點:

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

編輯 -做@elclanrs對於這個特定問題的回答; 以下是針對您無法通過聰明的內置選擇器技巧完成的操作。


您可以將回調設置為變量:

$.fn.findVisible = function() {
  var rv;

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

  return rv;
};

如果您不喜歡混亂的局部變量,則可以將整個內容包裝為jQuery附加組件:

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

然后:

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

$.is()返回一個布爾值,因此:

return $(this).is(":visible") ? false: true; 是不必要的。

如果要返回該元素,則按如下所示形成條件:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM