jQuery: How to use each starting at an index other than 0

Carvell Fenton picture Carvell Fenton · Jan 21, 2011 · Viewed 13.1k times · Source

I have a collection of elements that I want to loop over using each, but I am looping over them inside an outer for loop. When I find what I want in the each, I return false to break out. The next time the outer loop runs, I want to start in the each at the element after the one I returned at. A generic code example:

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;
        }
    });
}

I thought about switching to a for loop, but then I got confused as to how to access the return from the .find('.someClass'). Maybe that's a separate question itself...

Is this an obvious one?

Answer

Šime Vidas picture Šime Vidas · Jan 21, 2011

Use slice() http://api.jquery.com/slice/

$('#someElemID').find('.someClass').slice(nextIndex).each( ...  

btw if the elements are static, consider caching:

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;
        }
    });
}

That should improve performance considerably.