<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> - Possible duplicate question: How to track class change - Air
|
2 answers
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> |