jQuery:如何使用从0以外的索引开始的每个

Car*_*ton 14 each jquery

我有一个元素集合,我想使用每个元素循环,但我在一个外部for循环中循环它们.当我在每个中找到我想要的东西时,我会返回false来突破.下一次外循环运行时,我想在我返回的元素之后的元素中开始.一般代码示例:

var nextIndex = 0;

for (var j=1; j <= someCount; j++) {
    // do outside loop stuff

    $('#someElemID').find('.someClass').each(function(index) {
        if (/*this is right one*/) {
            // do something
            // next index should get passed to each function next loop... somehow?
            nextIndex = index + 1; 
            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

我想过切换到for循环,但后来我对如何从中获取返回感到困惑.find('.someClass').也许这本身就是一个单独的问题......

这是显而易见的吗?

Šim*_*das 17

使用slice() http://api.jquery.com/slice/

$('#someElemID').find('.someClass').slice(nextIndex).each( ...  
Run Code Online (Sandbox Code Playgroud)

顺便说一句,如果元素是静态的,请考虑缓存:

var $elms = $('.someClass', '#someElemID'),
    nextIndex = 0;

for (var j = 1; j <= someCount; j++) {
    // do outside loop stuff

    $elms.slice(nextIndex).each(function(index) {
        if (/*this is right one*/) {
            nextIndex = index + 1; 
            return false;
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这应该会大大提高性能.


kar*_*m79 6

另一种可能性是将索引保存为未增量,然后您可以使用gt选择器直接选择存储索引之后出现的元素,如下所示:

$('#someElemID .someClass:gt(' + storedIndex + ')').each(function() {
    ...
Run Code Online (Sandbox Code Playgroud)

  • +1用于指出gt选择器.没意识到你可以这样使用它.谢谢. (2认同)