Вместо
img
класс лучше переключать у
article
- максимально дальних не общих предков картинок. Если вдруг захотите при кликах на кнопки стилизовать ещё что-то помимо картинок, или измените взаимное расположение элементов, то не придётся переписывать js-код. Стили, конечно, придётся немного поправить, вместо
.active
будет
.active img
.
const container = document.querySelector('.container');
const itemSelector = 'article';
const buttonSelector = `${itemSelector} .btn`;
const activeClass = 'active';
Делегирование, назначаем обработчик один раз:
container.addEventListener('click', e => {
const button = e.target.closest(buttonSelector);
if (button) {
button.closest(itemSelector).classList.toggle(activeClass);
}
});
Или каждой кнопке индивидуально:
container.querySelectorAll(buttonSelector).forEach(function(n) {
n.addEventListener('click', this);
}, e => e.currentTarget.closest(itemSelector).classList.toggle(activeClass));