我有一个列表,可能会也可能不会显示在屏幕上。我现在要做的是检查该列表中的所有li是否可见。如果li确实可见,那么我希望迭代停止然后获得该特定元素。
我的尝试: -
var getList = $("ul li").each(function(){
return $(this).is(":visible") ? false: true;
});
从我的理解上面的代码是什么,它从“ul li”选择器获取数组,并使用函数迭代。每当我注意到元素是可见的时,我就需要打破迭代,因此返回false以退出循环。
所以,现在问题是我不知道如何获得该元素。我已经到了可以停留在想要的元素并且卡在那里的地方。
答案 0 :(得分:6)
你可以这样做:
var $firstVisible = $('ul li:visible').first();
答案 1 :(得分:2)
编辑 - 做@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 visibleOne = $('ul li').findVisible(); // either undefined or a new jQuery object
答案 2 :(得分:2)
$.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()
的答案非常可靠。