Задать вопрос
v-borgomotov
@v-borgomotov
Молодой креативный специалист

Почему некорректно срабатывает функция .hasClass?

Помогите разобраться: Есть простенький код:
<div class="nextstep">
  <div class="next"><span>1</span></div>
  <div class="next active"><span>2</span></div>
  <div class="next"><span>3</span></div>
  <div class="next active"><span>4</span></div>
</div>

и к нему простой скрипт:
if ($('.nextstep .next').hasClass('active')) {
    $('.nextstep .next').find('span').addClass('yes');
  } else {
    $('.nextstep .next').find('span').addClass('no');
  };


Вроде логика проста: Если у блока есть класс active, то к элементу добавить класс. Но почему он не проверяет, а просто добавляет всем. Что я делаю не так? Объясните пожалуйста?

  • Вопрос задан
  • 158 просмотров
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
pickHabr
@pickHabr
Костыльных дел мастер
$('.nextstep .next')
- вернет все html элементы с такими классами
дальше ты работаешь со списком как с одним элементом, ожидаешь что код будет разбирать составляющие списка по отдельности
$(document).ready(function() {
       // проходим наши элементы циклом
	$('.nextstep .next').each(function(i, obj) {
		// проверяем условия для каждого элемента отдельно
		if ($(obj).hasClass('active')) {
			// применяем классы к соответствующему спану
			$(obj).find('span').addClass('yes');
		} else {
			$(obj).find('span').addClass('no');
		};
	});
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
Ваш код по сути просто переключает класс.
Это пишется в одну строку:

$('.nextstep .next').toggleClass('active');
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы