JSFiddle - React, Tailwind, and code Playground
HTML
<div class="res"></div>
<div class="container">
<div class="div">1</div>
<div class="div">2</div>
<div class="div">3</div>
<div class="div">4</div>
<div class="div">5</div>
<div class="div">6</div>
<div class="div">7</div>
<div class="div">8</div>
<div class="div">9</div>
<div class="div">10</div>
</div>
CSS
.res{
background-color: #f90;
height: 30px;
margin-bottom: 20px;
}
.div{
background-color: #ccc;
cursor: pointer;
margin-bottom: 20px;
}
JavaScript
var d = document; // чтоб писать меньше
var main = d.querySelector('.container'); // получили из дом контейнер с нашими дивами, по которым хотим кликать
var res = d.querySelector('.res'); // получили контейнер, куда выведем результат клика
for(var i = 0; i < main.children.length; i++){
/*пройдем циклом по всем детям внутри контейнера и добавим каждому аттрибут произвольного названия, который должен наинатся с data-, и установим ему значение - порядковый номер этого элемента*/
main.children[i].setAttribute('data-key', i);
}
/* теперь повесим событие клика, но не на всех детей, а на внешний контейнер, потому что в браузере работает так называемое всплытие событий, когда клик по ребенку генерирует клик и по родителю, то есть все, что с детьми происходит через оч короткое время всплывает к родителям даже оставил вывод в консоль, посмотрите, что будет в зис, а что в e.target
Параметр е браузер сам передает в функцию обработчик события, если его не принять, то как бы не получится с ним работать, поэтому просто пишем, что функция принимает параметр, и теперь с объектом события можно работать, а в нем много интересного, можете вывести в консоль и посмотреть, что там есть и как это можно применить
*/
main.addEventListener('click', function(e){
console.log('this:');
console.log(this);
console.log('----------');
console.log('e.target:');
console.log(e.target);
// при клике достаем дата атрибут, его значение, и записываем в div.res
res.innerHTML = e.target.getAttribute('data-key');
});
/*
Из минусов, если предполагается добавление элементов в дом, то прежде чем добавить надо пройтись снова по всем детям и переписать им значения дата аттрибутов.
Из плюсов, что событие вешается только на один элемент, и нам понадобилось только две переменные, переменную d можно было не создавать.
*/