<body> <div id ='container'> <div class='dot'>as1</div> <div class='dot'>sa2</div> <div class='dot'>as3</div> <div class='dot'>as4</div> </div> <script> var cont = document.getElementById("container"); var dots = document.getElementsByClassName('dot'); cont.addEventListener("click", function(event) { console.log(dots.indexOf(event.target)); // indexOf не работает }); </script> </body> 

2 answers 2

getElementsByClassName does not return an array, but a set of elements similar to an array:

 var cont = document.getElementById("container"); var dots = document.getElementsByClassName('dot'); cont.addEventListener("click", function(event) { console.log(Array.prototype.indexOf.call(dots, event.target)); // indexOf работает }); 
 <div id='container'> <div class='dot'>as1</div> <div class='dot'>sa2</div> <div class='dot'>as3</div> <div class='dot'>as4</div> </div> 

    Or through the operator added to es6 ...

     var cont = document.getElementById("container"); cont.addEventListener("click", function(event) { console.log([...document.getElementsByClassName('dot')].indexOf(event.target)); // indexOf работает }); 
     <div id='container'> <div class='dot'>as1</div> <div class='dot'>sa2</div> <div class='dot'>as3</div> <div class='dot'>as4</div> </div>