I'm trying to implement something like navigation, when clicking on the elements of which below will drop out a sub-list consisting of several links.
There is such a JS code:
(function() { var links = document.querySelectorAll('.nav--link-select'); var subLists = document.querySelectorAll('.nav__sub-list'); var navItems = document.querySelectorAll('.nav--item-select'); for (var i = 0; i < links.length; i++) { links[i].addEventListener('click', showSubList(i),false); } function showSubList(i){ return function (evt) { // ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΡΡΡΠ»ΠΊΡ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΠΎΡΠΊΡΡΡΡΠ΅ ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΊΠΈ for (var j = 0; j < subLists.length; j++) { subLists[j].classList.remove('nav--sub-show'); links[j].classList.remove('nav--link-after'); navItems[j].classList.remove('nav--item-selected'); } evt.stopPropagation(); evt.preventDefault(); // console.log(i); // ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ Π½Π° ΡΡΡΠ»ΠΊΡ ΠΎΡΠΊΡΡΠ²Π°Π΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΎΠΊ subLists[i].classList.add('nav--sub-show'); links[i].classList.add('nav--link-after'); navItems[i].classList.add('nav--item-selected'); }; }; // ΠΏΡΠΈ ΠΊΠ»ΠΈΠΊΠ΅ ΠΏΠΎ ΠΎΠΊΠ½Ρ Π·Π°ΠΊΡΡΠ²Π°Π΅ΠΌ Π²ΡΠ΅ ΠΏΠΎΠ΄ΡΠΏΠΈΡΠΊΠΈ document.onclick = function(evt) { for (var k = 0; k < links.length; k++) { subLists[k].classList.remove('nav--sub-show'); links[k].classList.remove('nav--link-after'); navItems[k].classList.remove('nav--item-selected'); } } })(); Here is the link to Codepen .
When clicking on the .nav--link-select links .nav--link-select 1, 2 and 4, they add the nav--link-after class nav--link-after , which changes the appearance of the pseudo-element (arrow). And the .nav__sub-list falls out by adding the class nav--sub-show .
Also, when a new sub-list opens, all those that were before it are closed; when clicking on any other window element, the sub-list also closes.
I do not understand how to implement it so that when you click on a link with an open sublist, it closes?