Here, why toggle approach in not working ?
I am trying to run custom function and loop this function in pure JavaScript.
I am expecting Jquery toggle. When header is clicked then add dsplyBlck
to it’s child article, remove dsplyBlck
to it’s child article when header is re-click.
window.onload = function(){ var hdr = document.querySelectorAll('header'); for(var i=0; i<hdr.length; i++){ hdr[i].onclick = function(){ var elm = this.closest('section').querySelector('article'); tgglArticle(elm,this); } } } function tgglArticle(elm, hdr){ elm.classList.add('dsplyBlck'); hdr.addEventListener('click',function(){ console.log('Here message is displaying, but remove class not working'); elm.classList.remove('dsplyBlck'); tgglArticle(elm,hdr); }) }
.dsplyNne{ display:none; } .crsr{ cursor:pointer; } .dsplyBlck{ display:block; }
<section> <header class='crsr'> Header </header> <article class='dsplyNne'> Details </article> </section> <section> <header class='crsr'> Header </header> <article class='dsplyNne'> Details </article> </section>
Advertisement
Answer
I have rewritten the javascript. Documentation in the source.
window.onload = () => { // Capture the header elements in an array const hdr = [...document.querySelectorAll('header')]; // Add an eventlistener for each header element hdr.map( (h) => { h.addEventListener( "click", (e) => { // Toggle the class for the next sibling (article) const t = e.currentTarget.nextElementSibling; t.classList.toggle("dsplyNne"); }); }); }
.dsplyNne { display: none; } .crsr { cursor: pointer; } .dsplyBlck { display: block; }
<section> <header class='crsr'> Header </header> <article class='dsplyNne'> Details </article> </section> <section> <header class='crsr'> Header </header> <article class='dsplyNne'> Details </article> </section>