Given the following markup
- first item
- second item
- t
The first is faster:
$("ul li.item")
This is true simply because it's equivalent, but isn't running the selector engine (Sizzle) twice to get there.
For your edit: You use .filter()...well, when you need to filter the current set, or when you need a complex filter. For example if you wanted to chain but not select the set again:
$("ul li").addClass('everyItem').filter('.item').fadeOut();
Or a complex filter:
$("ul li").filter(function() {
return $.data(this, 'hasSomething');
}).fadeOut();
There are many uses of filter, it really depends on the situation as to what fits best. As pertains to your question though, $(selector).filter(selector)
...I can't think of a case where you'd want this over a single selector if it's at all possible. The only case off the top of my head you can't do that is a complex :has() and :not() wrapping.