public
Last active — forked from padolsey/gist:500145

Like .quickEach, but subtly different

  • Download Gist
jquery.ba-each2.js
JavaScript
1 2
// Plugin released:
// http://benalman.com/projects/jquery-misc-plugins/#each2

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...

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

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

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.

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

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.

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

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!

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.

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

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.