Skip to content

Instantly share code, notes, and snippets.

@padolsey
Created July 30, 2010 08:25
Show Gist options
  • Save padolsey/500145 to your computer and use it in GitHub Desktop.
Save padolsey/500145 to your computer and use it in GitHub Desktop.
// The `quickEach` method will pass a non-unique jQuery instance
// to the callback meaning that there will be no need to instantiate
// a fresh jQuery instance on each iteration. Most of the slow-down
// inherent in jQuery's native iterator method (`each`) is the constant
// need to have access to jQuery's methods, and so most developers
// see constructing multiple instances as no issue... E.g.
// $(...).each(function(){ $(this)... $(this)... $(this)... });
// A better approach would be `quickEach`.
jQuery.fn.quickEach = (function(){
var jq = jQuery([1]);
return function(c) {
var i = -1, el, len = this.length;
try {
while (
++i < len &&
(el = jq[0] = this[i]) &&
c.call(jq, i, el) !== false
);
} catch(e){
delete jq[0];
throw e;
}
delete jq[0];
return this;
};
}());
// E.g.
jQuery('div').quickEach(function(i){
// `this` is a jQuery object
this.attr('id', 'd' + i).css('color', 'red'); // etc.
});
@mathiasbynens
Copy link

In case you were wondering what the performance gain of using quickEach instead of each is: http://jsperf.com/jquery-each-vs-quickeach#run

@igstan
Copy link

igstan commented May 1, 2011

You can use a try/finally instead of a try/catch and a double delete jq[0].

@yckart
Copy link

yckart commented Mar 22, 2013

Just something helpfull: jQuery.fn.each = jQuery.fn.quickEach || jQuery.fn.each2 || jQuery.fn.each;

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment