Given some jQuery object set, and also a subset of that set, is there a method that will return the inverse subset?
If the answer is \"No
There's no built-in function for this, the reverse filter is what you're after...the alternative isn't chainable. The alternative would be .not(), like this:
var all = $('li').css('background-color','blue');
var sub = all.filter('.subset').css('color','black');
all.not(sub).css('color','white');
...but again it's not pretty, I'd stick with the .end().filter()
approach. However, if performance is paramount, use the .not() approach above, it is more efficient (since no selector runs for the inverse set).
For your specific example (though not the general question), it'd be pretty quick to do this:
$('li').css('background-color','blue').css('color','white')
.filter('.subset').css('color','black');
Here is a little extension to jquery about it that i just made..
(function($) {
$.fn.reverse = function ()
{
var orig = this.prevObject || jQuery(null);
return orig.not(this);
}
})(jQuery);
It will maintain the chaining, so you can still do .end()
after it and return to the previous filtering.
You can call it like
$('li').css('background-color','blue')
.filter('.subset')
.css('color','black')
.reverse() // <-- White Whale?!?
.css('color','white');
Demo with your example: http://www.jsfiddle.net/gaby/THLkn/