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.
JavaScript
x
18
18
1
window.onload = function(){
2
var hdr = document.querySelectorAll('header');
3
for(var i=0; i<hdr.length; i++){
4
hdr[i].onclick = function(){
5
var elm = this.closest('section').querySelector('article');
6
tgglArticle(elm,this);
7
}
8
}
9
}
10
11
function tgglArticle(elm, hdr){
12
elm.classList.add('dsplyBlck');
13
hdr.addEventListener('click',function(){
14
console.log('Here message is displaying, but remove class not working');
15
elm.classList.remove('dsplyBlck');
16
tgglArticle(elm,hdr);
17
})
18
}
JavaScript
1
9
1
.dsplyNne{
2
display:none;
3
}
4
.crsr{
5
cursor:pointer;
6
}
7
.dsplyBlck{
8
display:block;
9
}
JavaScript
1
16
16
1
<section>
2
<header class='crsr'>
3
Header
4
</header>
5
<article class='dsplyNne'>
6
Details
7
</article>
8
</section>
9
<section>
10
<header class='crsr'>
11
Header
12
</header>
13
<article class='dsplyNne'>
14
Details
15
</article>
16
</section>
Advertisement
Answer
I have rewritten the javascript. Documentation in the source.
JavaScript
1
12
12
1
window.onload = () => {
2
// Capture the header elements in an array
3
const hdr = [document.querySelectorAll('header')];
4
// Add an eventlistener for each header element
5
hdr.map( (h) => {
6
h.addEventListener( "click", (e) => {
7
// Toggle the class for the next sibling (article)
8
const t = e.currentTarget.nextElementSibling;
9
t.classList.toggle("dsplyNne");
10
});
11
});
12
}
JavaScript
1
11
11
1
.dsplyNne {
2
display: none;
3
}
4
5
.crsr {
6
cursor: pointer;
7
}
8
9
.dsplyBlck {
10
display: block;
11
}
JavaScript
1
16
16
1
<section>
2
<header class='crsr'>
3
Header
4
</header>
5
<article class='dsplyNne'>
6
Details
7
</article>
8
</section>
9
<section>
10
<header class='crsr'>
11
Header
12
</header>
13
<article class='dsplyNne'>
14
Details
15
</article>
16
</section>