if you create html layout like so
The problem is that :odd and :even (and their CSS cousins :nth-child(odd) and :nth-child(even)) refer to the order in which the elements appear as children of their parent, not as children with that particular selector.
This worked for me (Prototype, but it looks like MooTools has similar syntax):
var odd = $$('.a').filter(function(item, index) {
return index % 2 == 0;
});
var even = $$('.a').filter(function(item, index) {
return index % 2 == 1;
});
Edit: it seems you already covered that in the question, boo on me for answering before reading fully.
If you are trying to get the 1st and third, you just need $$('.a').
Are you trying to get the 1st and 5th items? That would be something like $$('a:nth-child(4n+1))
I am assuming mootools uses css3 Structural pseudo-classes
eyelidlessness, so you say it's not a bug? It the way it should work?
The :nth-child pseudo selector looks at the DOM element's (non-zero indexed) index, not within the selected (matching) elements. MooTools added the ':odd' selector to select 'real' odd elements, therefore the index starts at 0.
So in your example, selecting '.a:nth-child(odd)' will return all li.a elements, because the index starts at 1. Selecting '.a:odd' selects nothing, because there are no 'real' odd li.a elements.
What you probably want, is to select the ':nth-of-type' element. So selecting '.a:nth-of-type(odd)' would return all odd li.a elements (the first and third one - it uses the DOM element's index).
MooTools does not support the ':nth-of-type' selector by default, but you can extend the selector engine using the Selectors.Pseudo class (can't find an example right now).