如何使用最接近的toggleClass删除其他元素上的类

时间:2014-12-05 14:38:14

标签: jquery addclass toggleclass closest

您好我有这个jQuery:

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');
});

如果他们再次点击相同的li,我需要删除.push-down。

///更新///

我现在使用下面的答案(谢谢)来实现这个目标

$('.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');
});

现在的问题是,如果他们点击了一个正确切换按下的li,我需要删除.open? : - /

1 个答案:

答案 0 :(得分:0)

在进行切换之前,请检查距"open"最近的li hasClass()状态boolean。如果您将toggleClass秒参数传递给true,则会根据false$('.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'); }); 值设置或清除该类。

e.g。

LI

注意:在最后一部分中,toggleClass在技术上并不正确(因为它之前被行清除,所以只设置它)。您想要使用.not()

从removeClass中排除点击的$('.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'); });

e.g。

{{1}}