I really prefer doing a 'return false' instead of throwing exceptions.
It just feels like an incredibly messy way to handle things - plus it
prevents you from writing good one-liners, which makes me sad.
Plus the change is trivial, too:
each: function( obj, fn, args ) {
if ( obj.length == undefined )
for ( var i in obj )
if ( fn.apply( obj[i], args || [i,
obj[i]] ) === false ) return obj;
else
for ( var i = 0; i < obj.length; i++ )
if ( fn.apply( obj[i], args || [i,
obj[i]] ) === false ) return obj;
return obj;
},
Should I add it in?
--John
On 10/12/06, Blair Mitchelmore <[EMAIL PROTECTED]> wrote:
> It seems like it would be really easy to implement a breaking mechanism
> for jQuery .each() function. We could use the same technique prototype
> does by creating a unique object and letting users throw that to break.
> We could create a 'break' property inside jQuery that .each() could
> catch to break the loop.
>
> Exception based (ala prototype) implementation:
>
> Example:
> $("p").each(function() {
> if ($(this).is(".unnecessary.beyond.here")) throw $['break'];
>
> $(this).addClass('this').addClass('was').addClass('totally').addClass('required');
> };
>
> Code:
> jQuery['break'] = new Object();
> jQuery.extend({
> each: function( obj, fn, args ) {
> if ( obj.length == undefined )
> for ( var i in obj )
> try {
> fn.apply( obj[i], args || [i, obj[i]] );
> } catch (e) {
> if (e == jQuery['break']) break;
> throw e;
> }
> else
> for ( var i = 0; i < obj.length; i++ )
> try {
> fn.apply( obj[i], args || [i, obj[i]] );
> } catch(e) {
> if (e == jQuery['break']) break;
> throw e;
> }
> return obj;
> },
> });
>
> Return Value based implementation:
>
> Example:
> $("p").each(function() {
> if ($(this).is(".unnecessary.beyond.here")) return $['break'];
>
> $(this).addClass('this').addClass('was').addClass('totally').addClass('required');
> };
>
> Code:
> jQuery['break'] = new Object();
> jQuery.extend({
> each: function( obj, fn, args ) {
> if ( obj.length == undefined )
> for ( var i in obj )
> if ( fn.apply( obj[i], args || [i, obj[i]] ) ==
> jQuery['break']) break;
> else
> for ( var i = 0; i < obj.length; i++ )
> if ( fn.apply( obj[i], args || [i, obj[i]] ) ==
> jQuery['break']) break;
> return obj;
> },
> });
>
> The code for this feature is marginal and it is one of the few things
> that I miss from my prototype days. This code is untested and might not
> work the way I expect it to, but you get the drift.
>
> -blair
>
> NB It may be better to use something other than 'break' as the variable
> name as it's a reserved word and you'd have to use the square bracket
> notation any time it is used.
_______________________________________________
jQuery mailing list
[email protected]
http://jquery.com/discuss/