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?
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.