Instantly share code, notes, and snippets.
Nice! Thanks for having a look Ben!
The try-catch is to make sure that jq 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 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)
fn.call( dom_elem, i, jq_object )
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.
fn.call( dom_elem, i, dom_elem )
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
Ok, pluginized and released!