Убрать класс active в jQuery

253
02 августа 2017, 21:02

При нажатии на "Итем2" и после этого при нажатии на "Итем1" - получается, что оба item'a имеют класс active и они начинают неадекватно себя вести.

Как поправить item'ы, чтобы, при раскрытом "Итем2", я кликнул на "Итем1", "Итем2" свернулся и открылся "Итем2".

$('.ti-main-item').click(function() { 
  $(this).toggleClass('active'); 
  if ($(".tog-inf-content").is(":visible")) { 
    $(".tog-inf-content").slideUp(); 
  } else { 
    $(".active .tog-inf-content").slideToggle(); 
  } 
});
.ti-main-item .tog-inf-content { 
  display: none; 
} 
 
.ti-main-item .fa-long-arrow-down { 
  display: inline-block; 
  transition: transform 0.5s ease; 
} 
 
.ti-main-item.active .fa-long-arrow-down { 
  transform: rotate(-180deg); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> 
 
<div class="ti-main-item"> 
  <a href="#" class="tog-inf-nav"> 
    <span class="ti-head">Итем1</span> 
    <span class="ti-arrow"><i class="fa fa-long-arrow-down"></i></span> 
  </a> 
  <div class="tog-inf-content"> 
    <ul> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
    </ul> 
  </div> 
</div> 
 
<div class="ti-main-item"> 
  <a href="#" class="tog-inf-nav"> 
    <span class="ti-head">Итем2</span> 
    <span class="ti-arrow"><i class="fa fa-long-arrow-down"></i></span> 
  </a> 
  <div class="tog-inf-content"> 
    <ul> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
    </ul> 
  </div> 
</div>

Answer 1
$('.ti-main-item').click(function() {
    // Toggle current menu
    $(this).toggleClass('active');
    $('.tog-inf-content', $(this)).slideToggle();
    // Hide siblings
    var siblings = $(this).siblings();
    siblings.removeClass('active');
    $('.tog-inf-content', siblings).slideUp();
});
Answer 2

$(".test") вернет вам массив из всех элементов с данным селектором. И выполнит функцию на первом. Поэтому такой вариант не подходит. Нужно искать соответствующий элемент в контексте, вот так:

var $content = $(this).find(".tog-inf-content");

$('.ti-main-item').click(function() { 
  $(this).toggleClass('active'); 
  var $content = $(this).find(".tog-inf-content"); 
  if ($content.is(":visible")) { 
   $content.slideUp(); 
  } else { 
    $content.slideToggle(); 
  } 
});
.ti-main-item .tog-inf-content { 
  display: none; 
} 
 
.ti-main-item .fa-long-arrow-down { 
  display: inline-block; 
  transition: transform 0.5s ease; 
} 
 
.ti-main-item.active .fa-long-arrow-down { 
  transform: rotate(-180deg); 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css"> 
 
<div class="ti-main-item"> 
  <a href="#" class="tog-inf-nav"> 
    <span class="ti-head">Итем1</span> 
    <span class="ti-arrow"><i class="fa fa-long-arrow-down"></i></span> 
  </a> 
  <div class="tog-inf-content"> 
    <ul> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
    </ul> 
  </div> 
</div> 
 
<div class="ti-main-item"> 
  <a href="#" class="tog-inf-nav"> 
    <span class="ti-head">Итем2</span> 
    <span class="ti-arrow"><i class="fa fa-long-arrow-down"></i></span> 
  </a> 
  <div class="tog-inf-content"> 
    <ul> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
      <li><a href="#">Описание</a></li> 
    </ul> 
  </div> 
</div>

READ ALSO
заменить input text на textarea

заменить input text на textarea

У меня есть множество полей ввода input text, которые я хочу заменять на textarea если человек входит с телефонаКак заменить я знаю, но как в замененную...

229
Расширение для Chrome, ошибка с обработчиком событий

Расширение для Chrome, ошибка с обработчиком событий

У меня есть расширение для хрома (уже опубликовано), но есть проблемаВ окне расширения (popup

291
Анимированное появление тени у path svg

Анимированное появление тени у path svg

Реализовала появление тени при наведении у path svg:

272
Помогите разобраться с запросом

Помогите разобраться с запросом

Есть запрос, но в нем нету 1 поля с таблицы images "SELECT id, name, url, description, visible, price, amount FROM products WHERE id = $id"; Есть запрос с join где как раз объединил 2 таблицы,...

212