querySelectorAll обработка в функции

150
11 апреля 2022, 08:30

Делаю обработчики для меню, получается так, что обрабатываю множество событий на различные селекторы. Получаю все элементы через класс с помощью querySelectorAll(); На выходе что-то подобное:

let elem1 = document.querySelectorAll("elem-class-1 > li > a");
let elem2 = document.querySelectorAll("elem-class-1 > li > a");
let elem2 = document.querySelectorAll("elem-class-1 > li > a");
for (let i = 0; i < elem1.length; i++) {
    elem1[i].addEventListener("click", funcClick1);
}
for (let i = 0; i < elem2.length; i++) {
    elem2[i].addEventListener("click", funcClick2);
}
for (let i = 0; i < elem3.length; i++) {
    elem3[i].addEventListener("click", funcClick3);
}
function funcClick1(e) {
    ...
}
function funcClick2(e) {
    ...
}
function funcClick1(e) {
    ...
}

Само собой напрашивается решение для обработки querySelectorAll и тут я делаю такое:

function handlerSelectors (paramElem, paramHandler) {
    for (let i = 0; i < paramElem.length; i++) {
        paramElem= paramElem[i];
        paramElem.addEventListener(paramHandler)
    }
}

Чтобы просто собирать селекторы тогда когда мне нужно и подписывать на клик, используя нужный обработчик:

handlerSelectors(elem1, funcClick1);
handlerSelectors(elem2, funcClick2);
handlerSelectors(elem3, funcClick3);

Тоска начинает одолевать в тот момент, когда данной функцией я пробегаюсь по 2+ элементам. Например, если у меня есть:

<ul class="elem-class-1">
    <li><a href="#">Пункт 1</a></li>
    <li><a href="#">Пункт 2</a></li>
    <li><a href="#">Пункт 3</a></li>
</ul>

И я использую ту самую функцию, то получаю только первый ul li a, а хочется все.

Подскажите пожалуйста, что я делаю не так?

Answer 1

Внесено много правок от опечаток до названия функций.
Но формируя функцию таким образом Вы привязываете ко всем нажатиям элементов с тегом "a" одно и тоже действие. (Ко всем нажатиям элементов с тегом a класса .elem-class-1 привязываете одно и тоже действие - в примере вывод 123, для всех элементов a класса .elem-class-2 вывод функции 2 и так далее.)

Пример:

    let elem1 = document.querySelectorAll(".elem-class-1 > li > a"); 
    let elem2 = document.querySelectorAll(".elem-class-2 > li > a"); 
    let elem3 = document.querySelectorAll(".elem-class-3 > li > a"); 
    function handlerSelectors (paramElem, paramHandler) { 
        paramElem = Array.from(paramElem); 
        for (let i = 0; i < paramElem.length; i++) { 
            elem = paramElem[i]; 
            elem.addEventListener('click', paramHandler)// Но таким образом Вы привязываете ко всем нажатиям элементов с тегом "a" одно и тоже действие. 
        } 
    } 
    function funcClick1(e) { 
        console.log('123'); 
    } 
    function funcClick2() { 
        console.log('3'); 
    } 
    function funcClick3() { 
        console.log('345'); 
    } 
    handlerSelectors(elem1, funcClick1); 
    handlerSelectors(elem2, funcClick2); 
    handlerSelectors(elem3, funcClick3);
<ul class="elem-class-1"> 
    <li><a href="#">Пункт 1</a></li> 
    <li><a href="#">Пункт 2</a></li> 
    <li><a href="#">Пункт 3</a></li> 
</ul> 
<ul class="elem-class-2"> 
    <li><a href="#">Пункт 1</a></li> 
    <li><a href="#">Пункт 2</a></li> 
    <li><a href="#">Пункт 3</a></li> 
</ul> 
<ul class="elem-class-3"> 
    <li><a href="#">Пункт 1</a></li> 
    <li><a href="#">Пункт 2</a></li> 
    <li><a href="#">Пункт 3</a></li> 
</ul>

READ ALSO
Перемещение метки яндекс карты при движении курсора

Перемещение метки яндекс карты при движении курсора

На Авито (добавление объявления) при выборе адреса на карте метка движется вместе с курсором (по центру)Я пытаюсь повторить тоже самое , но не совсем...

243
Вопрос из задачника

Вопрос из задачника

Число называется счастливым если при складывании, суммы обеих сторон числа ровны друг другуНа пример։A=1230 считается счастливым потому что...

295
Хочу понять как работает эта функция (Java Script)

Хочу понять как работает эта функция (Java Script)

Найти наибольший общий делитель двух натуральных чисел:

211
Почему не работают мягкие переходы страниц (barba)?

Почему не работают мягкие переходы страниц (barba)?

Я подключил barba js(второй версии) и gsap через cdn:

144