在jQuery中查找第一个可见子项的索引

时间:2012-02-19 22:01:44

标签: jquery

我有一个函数可以找到第一个可见子元素的索引。它有效,但我想知道是否有更快/更好的方法:

var TheDiv = $('#' + TheDivID);
var CurrentIndex = 0;

TheDiv.children().each(function () {
    if ($(this).is(':visible')) {
        CurrentIndex = $(this).index();
        break;
    }
});

感谢您的建议。

2 个答案:

答案 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'),除了远远快得多。

由于一旦找到可见元素就会突然出现循环,因此它可能比选择器字符串方法更快。