Есть массив. Мне нужно обработать 4 предыдущих и 4 следующих элемента навесив на них класс. Исключением должны быть первый и последний элемент массива - их обрабатывать ненужно.
Сейчас я пробую так:
button.find((element, index) => {
if (element.matches(".-js-active")) {
button[index+1]?.classList.add("-js-visible")
button[index+2]?.classList.add("-js-visible")
button[index+3]?.classList.add("-js-visible")
button[index+4]?.classList.add("-js-visible")
//
button[index-1]?.classList.add("-js-visible")
button[index-2]?.classList.add("-js-visible")
button[index-3]?.classList.add("-js-visible")
button[index-4]?.classList.add("-js-visible")
} else {
if (element.matches(".page-go:not(.-js-last):not(.-js-first)")) {
element.classList.remove("-js-visible")
}
}
})
Но это работает не правильно. Так же мне бы хотелось избавиться от перечисления
button[index-N] и
button[index+N].
UPD: было бы здорово уместить всё в один перебор массива. А то у меня есть вариант с двумя:
вариант 2
button.forEach((element, index) => {
if (element.matches(".page-go.-js-visible:not(.-js-last):not(.-js-first)")) {
element.classList.remove("-js-visible")
}
})
button.find((element, index) => {
if (element.matches(".-js-active")) {
button[index+1]?.classList.add("-js-visible")
button[index+2]?.classList.add("-js-visible")
button[index+3]?.classList.add("-js-visible")
button[index+4]?.classList.add("-js-visible")
//
button[index-1]?.classList.add("-js-visible")
button[index-2]?.classList.add("-js-visible")
button[index-3]?.classList.add("-js-visible")
button[index-4]?.classList.add("-js-visible")
}
})