
В библиотеке Mootools уже реализованы большинство псевдоселекторов CSS3: :nth-child, :contains, :not и др. Но у вас есть возможность не ограничиваться имеющимся выбором и создать свой собственный CSS селектор, который можно будет использовать в таких функциях Mootools, как $$ и getElement. Все, что нужно будет сделать, это добавить свою функцию к объекту Selectors.Pseudo. В функцию будут передаваться два аргумента – параметр, передаваемый селктору (:pseudo(parameter)) и объект, который может быть использован в качестве временного хранилища данных при последовательном проходе элементов. Последний аргумент используется к примеру в псевдоселекторе :nth-child. Функция должна возвращать true если элемент соответствует критериям выбора или false в обратном случае.
В качестве примера можно продемонстрировать псевдокласс :random, созданный Яном Кассенсом:
Selectors.Pseudo.random = function(probability, local){
return Math.random() < (probability || .5).toFloat();
};
// выбор примерно половины div-ов на странице
$$('div:random');
// выборка 20% заголовков h2 с классом article
$$('h2.article:random(.2)');
Такой псевдоселектор позволяет выбирать случайные элементы из DOM. В первом примере будут выбраны примерно половина элементов div на странице, а во втором будет произведена выборка всех загловков h2 с классом article, а затем в случайном порядке будут выбраны 20% из их общего числа.
Еще один пример реализации псевдоселектора я подсмотрел на блоге у Девида Уолша:
Selectors.Pseudo.selected = function(){
return (this.selected && this.get('tag') == 'option');
};
Это селектор :selected, который имеется в jQuery. Суть его заключается в том, что он выбирает выбранные элементы option из списка select:
<select name="mysel" id="mysel" multiple="multiple"> <option value="One">One</a> <option value="Two">Two</a> <option value="Three" selected="selected">Three</a> <option value="Four" selected="selected">Four</a> </select>
Удобная это вещь - псевдоселектор, не правда ли? Тем более если его можно легко создавать самому, под свои нужды.
