Skip to content
Create a gist now

Instantly share code, notes, and snippets.

Like .quickEach, but subtly different
// Plugin released:
// http://benalman.com/projects/jquery-misc-plugins/#each2
@padolsey
padolsey commented Aug 1, 2010

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
padolsey commented Aug 1, 2010

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

@cowboy
Owner
cowboy commented Aug 1, 2010

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

@cowboy
Owner
cowboy commented Aug 1, 2010

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
malsup commented Aug 1, 2010

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

@padolsey
padolsey commented Aug 2, 2010

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
padolsey commented Aug 2, 2010

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

@cowboy
Owner
cowboy commented Aug 2, 2010

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
cowboy commented Aug 2, 2010

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
cowboy commented Aug 2, 2010

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

@cowboy
Owner
cowboy commented Aug 3, 2010
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.