Я все еще привыкаю к простому JavaScript и создаю базовый набор элементов квадратной формы, которые будут добавлять и удалять классы при нажатии.Я использую массив, который добавит конкретный из этих классов.При нажатии я хотел бы удалить все эти классы перед добавлением нового.Так, например, при нажатии на 2-й квадрат, 'classB' будет добавлен только к этому, а затем щелчок по любым другим удалит его.
Я понимаю, что classList.remove
должно быть до classList.add
, но по какой-то причине он не работает.Я всегда получаю сообщение "Не удается прочитать свойство 'удалить' из неопределенного в HTMLDivElement.elem.addEventListener".
Однако, если я использую jQuery. removeClass
, это работает без проблем.Но я бы предпочел не использовать jQuery.
Вот фрагмент.Вы можете увидеть classList.remove
, что я пробовал в том, что закомментировано.
const addClass = ['classA','classB','classC','classD'];
const numbers = [0,1,2,3];
const square = document.querySelectorAll('.square');
square.forEach((elem, i) => {
elem.addEventListener('click', () => {
//square[i].classList.remove(...addClass)
$(square).removeClass('classA classB classC classD');
if (i == numbers[i]) {
elem.classList.add(addClass[i]);
}
});
});
.square {
width: 2rem;
height: 2rem;
background-color: black;
margin: 1rem;
}
.classA { background-color: red; }
.classB { background-color: yellow; }
.classC { background-color: green; }
.classD { background-color: blue; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
<div class="square"></div>
</div>
Я просмотрел кучу других вопросов здесь и на других сайтах, но на самом деле не вижу его.