Skip to content

Embed URL

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Like .quickEach, but subtly different
// Plugin released:
// http://benalman.com/projects/jquery-misc-plugins/#each2
@padolsey

Nice! Thanks for having a look Ben!

The try-catch is to make sure that jq[0] is cleared (even if an exception is thrown within the callback) -- otherwise memory leaks could potentially occur -- it's an edge case, but still...

@padolsey

I like the backwards-compatible each ... that may be a better option than adding a new quickEach method.

@cowboy
Owner

James, check out the new, third, approach.. it might be a good compromise!

@cowboy
Owner

Note that there is some extra-args-passing that the current jQuery.fn.each does that would have to be added in, but that's just an array concat / apply.

@malsup

$([]).length == $().length == 0

@padolsey

Can this be added to the core? I think it would be worth it!

Also, I think it'd be best to add the try-catch -- an exception thrown in a callback several times could cause a memory leak -- I might be completely wrong about this, but the fact that jq[0] won't be cleared presents a potential issue.

@padolsey

Plus I think the backwards-compatible suggestion is definitely the way to go!

@cowboy
Owner

Mike, any time I post/release a plugin, if I can make it backwards-compatible with older jQuery versions easily I will.. Since $([]) is a backwards-compatible way of "selecting" an empty set, I'll use that. Of course, for older jQueries, selecting document won't really consuming a whole lot of memory, but still.. that's how I roll!

@cowboy
Owner

James, I was thinking of releasing this as a standalone "jQuery fast .each" plugin, with code pretty much just as it is in this gist, and with the callback signature fn.call( dom_elem, i, jq_object ). Would you object to that? (I don't want to step on your toes here)

I also definitely think that this should be considered for inclusion in core, with Resig making whatever decision regarding its signature/context if necessary, should it ever get to that point. I personally feel that changing jQuery's .each signature from fn.call( dom_elem, i, dom_elem ) to fn.call( dom_elem, i, jq_object ) would be acceptable, but that's obviously not my call.

@cowboy
Owner

Ok, major correction.. this is going to be WAY slower than the core .each in scenarios where the user doesn't need a jQuery object inside the callback... so it should definitely be a separate method. See http://jsperf.com/jquery-each-vs-quickeach/2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.