我有一个元素集合,我想使用每个元素循环,但我在一个外部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)
这应该会大大提高性能.
另一种可能性是将索引保存为未增量,然后您可以使用gt选择器直接选择存储索引之后出现的元素,如下所示:
$('#someElemID .someClass:gt(' + storedIndex + ')').each(function() {
...
Run Code Online (Sandbox Code Playgroud)