![](/img/trans.png)
[英]Javascript: The size of my array decreases with each for-loop iteration. Why?
[英]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.