在每次迭代中获取元素
Getting the element on each iteration.
我有一个列表,可能会也可能不会显示在屏幕上。我现在要做的是检查列表中的所有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()
的答案非常可靠。
相关文章:
- 如何在jQuery中获取元素的形式
- 通过id和class属性获取元素
- Javascript:Can't使用getElementById获取元素
- 使用jquery.html()获取元素本身的html
- 如何从iframe内部获取元素
- Javascript函数获取元素内容
- 使用模板后,使用Angular获取元素属性值
- 获取元素类名的部分
- 从JSON.parse获取元素
- 获取元素内部的缩写
- 在不引用文档的情况下使用AngularJS获取元素
- 如何获取元素's的title属性
- 使用Javascript,获取元素的方法是什么,基于打开和关闭标记之间的文本
- Javascript获取元素背景图像,但消除了“;url()”;
- Javascript:按类获取元素,但跳过某个类
- 当display:none时,getElementById()无法获取元素
- 我的ID获取元素不起作用
- 如何获取元素:使用javascript和CORS悬停背景
- 能够获取元素长度,但不能获取内部 HTML
- 如何使用jQuery在模板kendo UI中获取元素类