Попробуйте это для # 1:
$(".toggle").click(function(){
$('#nav ul:visible').toggle();
$('ul',this).toggle();
});
Редактировать: (переработано для завершения)
var cur = null;
$(".toggle").click(function(){
$('#nav ul:visible').toggle();
console.log();
if(cur != null)
{
cur.removeClass('fc-state-active').addClass('fc-state-default');
}
cur = $(this).children('a:first').children('span').removeClass('fc-state-default').addClass('fc-state-active');
$('ul',this).toggle();
});
Скрипка здесь
Я кеширую текущий выбранный элемент меню здесь, чтобы избежать глобального селектора (и дополнительных издержек).
Edit:
Итак, вот что я придумала (извините, я бы раньше, но не было):
var cur = null;
$(".toggle").click(function(e){
$('#nav ul:visible').hide();
if(cur == null || cur.currentTarget != e.currentTarget)
{
if(cur != null)
{
$(cur.currentTarget)
.removeClass('fc-state-active')
.addClass('fc-state-default');
}
cur = e;
$(cur.currentTarget)
.removeClass('fc-state-default')
.addClass('fc-state-active')
.children('ul')
.show();
}
else
{
$(cur.currentTarget)
.removeClass('fc-state-active')
.addClass('fc-state-default');
cur = null;
}
});
$('body').children().not('ul#nav').click(function(e){
$('#nav ul:visible').hide();
$(cur.currentTarget)
.removeClass('fc-state-active')
.addClass('fc-state-default');
cur = null;
});
Вы можете проверить обновление по тому же URL-адресу скрипки. Предупреждение об этом обновлении заключается в том, что пользователь должен щелкнуть в любом месте страницы, где содержит что-то (базовый селектор body
). Не удалось найти хороший селектор для в любом месте , кроме элемента nav (возможно, где-то вложенного в дочерние элементы объекта document
), но я слишком устал, чтобы копать больше:)
О, и я не был доволен структурой последнего обновления, поэтому я просто переписал его: P