Без изменения HTML, как я могу получить индекс каждого контейнера слайдов при нажатии?
например. они нажали на 2, как мне получить значение, такое как node[1]?
document.getElementById("slides").addEventListener("click", function(e){
console.info(e.target);
});<section id = "slides">
<div class = "slide">1</div>
<div class = "slide">2</div>
<div class = "slide">3</div>
</section>


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


Вы можете использовать .indexOf() и .querySelectorAll(), передав ему список div и цель в качестве аргументов.
document.getElementById("slides").addEventListener("click", function(e){
var nodes = document.querySelectorAll('#slides > .slide');
console.info([].indexOf.call(nodes, e.target));
});<section id = "slides">
<div class = "slide">1</div>
<div class = "slide">2</div>
<div class = "slide">3</div>
</section>Пока вы не используете синтаксис стрелочной функции в обратном вызове, вы можете использовать this для ссылки на элемент slides. Используя синтаксис распространения ES6, вы можете распространять его дочерние элементы в массив, а затем использовать indexOf в этом массиве, чтобы получить индекс e.target внутри него:
document.getElementById("slides").addEventListener("click", function(e) {
const idx = [...this.children]
.filter(el => el.className.indexOf('slide') > -1)
.indexOf(e.target);
if (idx > -1) {
console.info(`Slide index: ${idx}`);
}
});<section id = "slides">
<div class = "slide">1</div>
<div class = "slide">2</div>
<span>Not a slide</span>
<div class = "slide">3</div>
</section>Обновлено:
Я обновил свой ответ, включив в него только элементы, имеющие класс slide, реализовав метод filter - без этого индекс может быть сброшен родственными элементами, которые не являются слайдами.
В качестве примечания, если sildes содержат другие элементы, а не только текст, замените
e.targetнаe.target.closest(".slide")(проверьтеclosestсовместимость браузера на МДН)