@ForSureN1
frontend dev

Как удалять/добавлять соседним элементам класс?

Добрый день, решаю задачку, и что то остановился на этом моменте, никак не могу разобраться, нужно по клику на карточку, добавлять соседним элементам класс, с этим я справился, но теперь по клику на другую карточку, эти классы не удаляются, у тех, где были. Заранее благодарю за помощь
let cards = document.querySelectorAll('.card')

cards.forEach((card) => {
	card.addEventListener('click', () => {
		card.classList.remove('active')
		card.previousElementSibling.classList.add('active')
		card.nextElementSibling.classList.add('active')
	})
})


Ссылка на песочницу https://codepen.io/forsuren1/pen/WNExmwa

P.S.
Добавил вот такое условие, работает почти как нужно, только почему то по клику на первую карточку, в консоли выходит ошибка, и ничего не добавляется соседней карточке, но если кликнуть на последнюю карточку, то предыдущей добавляется
let cards = document.querySelectorAll('.card')

cards.forEach((card, index, cards) => {
	card.addEventListener('click', () => {
		// cards[0].classList.remove('active')
		// cards[1].classList.remove('active')
		// cards[2].classList.remove('active')
		// cards[3].classList.remove('active')
		let parentnode = card.parentNode.children
		for (let sibling of parentnode) {
			sibling.classList.remove('active')
		}
		card.previousElementSibling.classList.add('active')
		card.nextElementSibling.classList.add('active')
	})
})
  • Вопрос задан
  • 47 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
document.querySelector('.cards').addEventListener(
  'click',
  (e) => {
    if (!e.target.matches('.card')) {
      return;
    }
    document.querySelectorAll('.card.active').forEach(
      (c) => c.classList.remove('active')
    );
    if (e.target.previousElementSibling) {
      e.target.previousElementSibling.classList.add('active');
    } 
    if (e.target.nextElementSibling) {
      e.target.nextElementSibling.classList.add('active');
    } 
  },
);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@Asokr
Просто убирайте класс со всех карточек при клике
let cards = document.querySelectorAll('.card')

cards.forEach((card) => {
  card.addEventListener('click', () => {
    cards.forEach((item) => {
      item.classList.remove('active')
    })
    card.classList.remove('active')
    card.previousElementSibling.classList.add('active')
    card.nextElementSibling.classList.add('active')
  })
})
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Сбер Санкт-Петербург
от 250 000 ₽
NewGen Vision Санкт-Петербург
от 30 000 до 60 000 ₽
от 3 000 до 4 500 €
29 нояб. 2021, в 00:20
650 руб./за проект
29 нояб. 2021, в 00:12
500 руб./за проект
28 нояб. 2021, в 22:25
5000 руб./за проект