我有一个函数可以找到第一个可见子元素的索引。它有效,但我想知道是否有更快/更好的方法:
var TheDiv = $('#' + TheDivID);
var CurrentIndex = 0;
TheDiv.children().each(function () {
if ($(this).is(':visible')) {
CurrentIndex = $(this).index();
break;
}
});
感谢您的建议。
答案 0 :(得分:5)
如果TheDiv
已经存在,请在.children()
方法中添加选择器,并使用.index()
获取元素的索引:
TheDiv.children(':visible').index();
否则,请使用:
CurrentIndex = $('#' + TheDivID + ' > :visible').index();
答案 1 :(得分:3)
Rob W's answer很好,可能是编写此代码的最短方式。但是,它不一定是效率最高的。
jQuery的自定义选择器慢。它们不是可以使用querySelectorAll
的原生选择器的补丁。更重要的是,children(':visible')
(或类似的)将测试每个元素的可见性,即使这对您的应用程序来说不是必需的。例如,如果你有300个孩子并且第一个是可见的,你不需要测试下一个299,但是这个方法会这样做。
所以实际上你在问题中提出的方法可能与理想上的距离不太远。它不会工作(break
在jQuery选择中不起作用)is
非常慢,但我认为它可以清理......
TheDiv.children().each(function (i) {
if (jQuery.expr[':'].visible(this)) {
CurrentIndex = i;
return false;
}
});
这使用return false
来突破each
循环。它还使用jQuery的过滤器(以完全非正统和未记录的方式)来测试可见性。令人困惑的行完全等同于$(this).is(':visible')
,除了远远快得多。
由于一旦找到可见元素就会突然出现循环,因此它可能比选择器字符串方法更快。