Если прямо отвечать на спрошенное, то...const items = document.querySelectorAll('.faq__input');
const onChange = ({ target: t }) => t
.closest('.faq__items')
.querySelectorAll('.faq__question--top')
.forEach(n => n.classList.toggle('active', n.nextElementSibling.checked));
items.forEach(n => n.addEventListener('change', onChange));
Но вообще, предлагаю назначать класс элементам, находящимся максимально высоко, самым дальним не общим предкам радиокнопок. Т.е.,
.faq__item
вместо
.faq__question--top
. Если в будущем задумаете стилизовать внутри выбранного
.faq__item
элементы, находящиеся за пределами
.faq__question--top
, то не придётся переписывать js-код.
Каким элементам надо переключать класс, что за радиокнопки находятся внутри, какой класс надо переключать, как класс переключать:
const itemSelector = '.faq__item';
const radioSelector = '.faq__input';
const activeClass = 'active';
const toggleActiveClass = radioGroupName => document
.querySelectorAll(`${radioSelector}[name="${radioGroupName}"]`)
.forEach(n => n.closest(itemSelector).classList.toggle(activeClass, n.checked));
Можно назначить обработчик события каждой радиокнопке индивидуально:
document.querySelectorAll(radioSelector).forEach(function(n) {
n.addEventListener('change', this);
}, e => toggleActiveClass(e.target.name));
А можно назначить делегированный обработчик странице:
document.addEventListener('change', ({ target: t }) => {
if (t.matches(radioSelector)) {
toggleActiveClass(t.name);
}
});