@DeniSidorenko

Как сделать, чтобы только один элемент имел класс?

Есть такая структура:
<ul>
<li> text1</li>
<li> text2</li>
<li> text3</li>
<li> text4</li>
<li> text5</li>
<li> text6</li>
</ul>


Сделал, чтобы при клике на li добавлялся класс active, который имеет свои стили. Однако, мне надо примерно такой функционал: кликнул по первому элементу, добавил класс active, кликнул по 5 элементу, 5 элемент получает class active, а у первого убирается. Короче, одновременно только один li может иметь класс active.
  • Вопрос задан
  • 436 просмотров
Решения вопроса 3
villiwalla
@villiwalla
HTML-верстка
$(document).on('click', 'li', function() {
  $('li').each(function(idx, elem) {
    if($(elem).has('active')) {
      $(elem).removeClass('active');
    }
  });
  $(this).addClass('active');
});
Ответ написан
stanislav-belichenko
@stanislav-belichenko
Backend PHP Developer
Самый удобочитаемый и короткий способ - сделать вот так:

$('.ads-category__link').on('click',function(){
  $(this).toggleClass('active');
});


Как несложно догадаться, метод toggleClass() не просто добавляет или удаляет указанный ему класс или классы, а "переключает" их, убирая, если они уже есть, или добавляя, если их еще нет.
Ответ написан
Комментировать
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
<ul id=menu>
<li> text1</li>
<li> text2</li>
<li> text3</li>
<li> text4</li>
<li> text5</li>
<li> text6</li>
</ul>

<script>
var menu= document.getElementById('menu');
menu.onclick= function(e) {
	[].forEach.call(menu.querySelectorAll('li'), function(i) {
		i.classList.remove('active');
	});
	e.target.classList.add('active');
	console.log(e.target);
}

</script>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы