Я перехожу с jQuery на MooTools (для удовольствия ..), и у меня есть такая строка кода:
$subMenus = $headMenu.find('li ul.sub_menu:visible');
Как я могу написать это в mootools?
Я знаю, что могу использовать getElements, но как я могу проверить видимую ul? (Я часто использую этот селектор (: visible)).
Редактировать -
Я реализовал свою функцию:
function findVisibleElements(elementsCollection){
var returnArray = [];
elementsCollection.each(function(el){
if(el.getStyle('display') === 'block'){
returnArray.push(el);
}
});
return returnArray;
}
И я хочу сдвинуть вверх все видимые подменю, вот что я написал:
// Sliding up the visible sub menus
if( visibleSubMenus.length > 0 ){
visibleSubMenus.each(function(el){
var slider = new Fx.Slide(el, {duration: 2000});
slider.slideOut();
});
}
Почему мой код не работает? Моя функция работает, а проблема связана с Fx.Slide.
Я добавил больше инструментов с помощью Fx.Slide.
2 ответа
Просто расширьте функциональность селектора - это MooTools!
$extend(Selectors.Pseudo, {
visible: function() {
if (this.getStyle('visibility') != 'hidden' && this.isVisible() && this.isDisplayed()) {
return this;
}
}
});
После этого просто выполните обычный $$('div:visible')
, который вернет видимые элементы.
Посмотрите на созданный мною пример: http://www.jsfiddle.net/oskar/zwFeV/ а>
Функция $$()
в Mootools в основном эквивалентна универсальному селектору $()
в JQuery.
// in MooTools
var elements = $$('.someSelector');
// natively in most newer browsers
elements = document.body.querySelectorAll('.someSelector');
Однако для этого конкретного случая, поскольку: visible не является настоящим псевдоклассом, вам придется аппроксимировать его, используя фильтр Array в Mootools.
var isItemVisible = function (item) {
return item.style.visibility != 'hidden' && item.style.display != 'none';
}
var elements = $$('ul').filter(isItemVisible);
Могут быть и другие вещи, которые, по вашему мнению, делают элемент «невидимым», и в этом случае вы можете соответственно добавить их в функцию фильтрации.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.