2014-12-05 34 views
0

你好我有了这个jQuery的:如何去除其他元素类toggleClass最接近

var $burger = $('#burger'), 
$body = $('body'), 
$main = $('main'), 
$menu = $('menu'), 
$menuItem = $('.nav__item--parent'), 
$trigger = $('.nav__item--parent > a'), 
$subMenu = $('.nav__sub-menu'); 

$burger.click(function() { 
    return $body.toggleClass('active'); 
    return false 
}); 
$('.nav__item--parent > a').click(function() { 
    $('.nav__item--parent.open').removeClass('open'); 
    $(this).closest('li').toggleClass('open'); 
    $main.toggleClass('push-down'); 
}); 

我需要.push下被删除,如果他们再次单击同一华里。

///更新///

现在我已经利用以下(感谢)的回答让这个

$('.nav__item--parent > a').click(function() { 
    var $li = $(this).closest('li'); 
    $main.toggleClass('push-down', $li.hasClass('open')); 
    $('.nav__item--parent.open').removeClass('open'); 
    $li.toggleClass('open'); 
    $main.toggleClass('push-down'); 
}); 

现在的问题是,如果他们点击一个李其切换正确的下推我需要删除。打开? : -/

+0

没有HTML我猜对了正确的真/假。你可能需要用'!$ li.hasClass('open')'来反转我的例子的逻辑。 :) – 2014-12-05 14:46:51

回答

0

检查最接近li"open"状态与hasClass(),然后再进行切换。如果您将第二个参数boolean传递给toggleClass,它将基于truefalse值设置或清除该类。

例如

$('.nav__item--parent > a').click(function() { 
    var $li = $(this).closest('li'); 
    $main.toggleClass('push-down', $li.hasClass('open')); 
    $('.nav__item--parent.open').removeClass('open'); 
    $li.toggleClass('open'); 
}); 

注:toggleClass是不是在最后一部分技术上是正确的(因为它是由前行清零,所以只设置它)。您想要从removeClass中排除点击LI.not()

例如,

$('.nav__item--parent > a').click(function() { 
    var $li = $(this).closest('li'); 
    $main.toggleClass('push-down', $li.hasClass('open')); 
    $('.nav__item--parent.open').not($li).removeClass('open'); 
    $li.toggleClass('open'); 
});