Моя задача - преобразовать весь код jquery в код, совместимый с es6.
Пример:
JQuery
$('.class1 .class2').on('click', function(e) {
// logic here
}
Совместимость с ES6
const test = document.querySelector('.class1 .class2');
test.addEventListener('click', (e) => {
//logic here
});
Это работает нормально, но я не могу преобразовать события кликов dom, которые регистрируются позже.
Пример:
JQuery
$(document).on('click', '.class1 .pagination a',
function(e) {
//logic here
})
Что я пытаюсь сделать:
var classname = document.querySelectorAll(".class1 .pagination a");
Array.from(classname).forEach(function(element) {
element.addEventListener('click', (e)=>{
e.preventDefault();
alert(e);
});
});
Здесь класс .class1 .pagination a регистрируется позже, поэтому имя класса становится пустым.
Но с использованием jquery $(document).on('click', '.class1 .pagination a') он работает правильно.
Любой указатель на то, как преобразовать события типа $(document).on('click', '.class1 .pagination a') в es6?
Я не знаю, почему вы используете массив.
Возможный дубликат Что такое делегирование событий DOM?
В частности, ответ stackoverflow.com/a/33015903/1586174 показывает некоторые фрагменты логики делегирования



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать делегирование событий, проверив цель события с помощью Element.matches ():
const delegate = (container, evtType, targets, cb) => {
const cont = (container === document || container instanceof HTMLElement) ?
container : document.querySelector(container);
if (!container) throw new Error('Event container not found');
document.addEventListener(evtType, e => {
if (!e.target.matches(targets)) return;
cb(e);
});
}
delegate(document, 'click', 'span, .class, #id, .container .inner a', (e) => console.info(e.target.innerText));<div class = "class">A class</div>
<div id = "id">An id</div>
<span>An element</span>
<div class = "container">
<div class = "inner"> <a href = "#">Nested Selectors</a></div>
</div>
<div>Not delegated</div>Вы можете прикрепить событие к документу и отфильтровать его с помощью селектора, используя функцию matches(), например:
document.addEventListener('click', clickEvent)
function clickEvent() {
if (!event.target.matches('.class1 .pagination a')) return
console.info(event.target)
}
//--JUST FOR DEMO START
setTimeout(function() {
$('ul').append("<li class='class1'><div class='pagination'> <a href='#'>Coffe</a></div></li>");
}, 1000);
//--JUST FOR DEMO END
document.addEventListener('click', clickEvent)
function clickEvent() {
if (!event.target.matches('.class1 .pagination a')) return
console.info(event.target)
}<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class=”characters”>
<li class='class1'>
<div class='pagination'> <a href = "#">Milk</a></div>
</li>
<li class='class2'>
<div class='pagination'> <a href = "#">Tea</a></div>
</li>
</ul>
Итак, короткий вопрос, который вы задаете и который можно задать в Google в Google или в stackoverflow, - это «как сделать привязку события делегата в javascript».