Added support for breaking in an object loop (Bug #2111).

This commit is contained in:
John Resig 2008-01-14 20:06:34 +00:00
parent ff08982508
commit c39bd07cc9
2 changed files with 22 additions and 7 deletions

View file

@ -707,20 +707,22 @@ jQuery.extend({
// args is for internal usage only // args is for internal usage only
each: function( object, callback, args ) { each: function( object, callback, args ) {
if ( args ) { if ( args ) {
if ( object.length == undefined ) if ( object.length == undefined ) {
for ( var name in object ) for ( var name in object )
callback.apply( object[ name ], args ); if ( callback.apply( object[ name ], args ) === false )
else break;
} else
for ( var i = 0, length = object.length; i < length; i++ ) for ( var i = 0, length = object.length; i < length; i++ )
if ( callback.apply( object[ i ], args ) === false ) if ( callback.apply( object[ i ], args ) === false )
break; break;
// A special, fast, case for the most common use of each // A special, fast, case for the most common use of each
} else { } else {
if ( object.length == undefined ) if ( object.length == undefined ) {
for ( var name in object ) for ( var name in object )
callback.call( object[ name ], name, object[ name ] ); if ( callback.call( object[ name ], name, object[ name ] ) === false )
else break;
} else
for ( var i = 0, length = object.length, value = object[0]; for ( var i = 0, length = object.length, value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} i < length && callback.call( value, i, value ) !== false; value = object[++i] ){}
} }

View file

@ -1314,7 +1314,7 @@ test("text(String)", function() {
}); });
test("$.each(Object,Function)", function() { test("$.each(Object,Function)", function() {
expect(8); expect(12);
$.each( [0,1,2], function(i, n){ $.each( [0,1,2], function(i, n){
ok( i == n, "Check array iteration" ); ok( i == n, "Check array iteration" );
}); });
@ -1326,6 +1326,19 @@ test("$.each(Object,Function)", function() {
$.each( { name: "name", lang: "lang" }, function(i, n){ $.each( { name: "name", lang: "lang" }, function(i, n){
ok( i == n, "Check object iteration" ); ok( i == n, "Check object iteration" );
}); });
var total = 0;
jQuery.each([1,2,3], function(i,v){ total += v; });
ok( total == 6, "Looping over an array" );
total = 0;
jQuery.each([1,2,3], function(i,v){ total += v; if ( i == 1 ) return false; });
ok( total == 3, "Looping over an array, with break" );
total = 0;
jQuery.each({"a":1,"b":2,"c":3}, function(i,v){ total += v; });
ok( total == 6, "Looping over an object" );
total = 0;
jQuery.each({"a":3,"b":3,"c":3}, function(i,v){ total += v; return false; });
ok( total == 3, "Looping over an object, with break" );
}); });
test("$.prop", function() { test("$.prop", function() {