open → closed
I think you're confusing how :eq and .eq() should operate.
$( 'ul.nav a:eq(6)' ) is essentially saying "get the 7th a element in ul.nav". But as sizzle goes through the dom, your first ul.nav element doesn't have 7 a elements, it only has 4 - thus you end up with the last one it could find.
$( 'ul.nav a' ) - now this gets all the a elements inside of a ul.nav ( 11 of them ) and .eq(6) gets the 7th one from that set.
Basically, it's an order of operations thing. .eq() is acting on the resulting set of objects, where as :eq() is working on that particular element. This is why $( 'a:eq(6)' ) and $( 'a' ).eq(6) both return the same element.
Also, eq is designed to retreive ONE element. So using it as a filter, for example, like $( 'ul.nav li a:eq(1)' ) and expecting it to get the 2nd a for every li isn't the expected behaviour. For that kind of operation, you'd want nth-child()
I'm marking it as needsdocs so that we can see about trying to address this in the documentation.
Hope this helps.