Was recently trying to play around JavaScript until I got stuck here…
I made four menu headers, each of which when clicked turns red, to show that the menu header is “active”. The problem however is, I want just one to turn red at a time, instead of all menu headers turning red for every header clicked.
JavaScript
x
11
11
1
let menuHeader = document.querySelectorAll('div.menu_header');
2
3
menuHeader.forEach((head) => {
4
head.addEventListener('click', () => {
5
if (!head.classList.contains('active_red')) {
6
head.classList.add('active_red');
7
} else {
8
head.classList.remove('active_red');
9
}
10
})
11
})
JavaScript
1
46
46
1
* {
2
margin: 0;
3
padding: 0;
4
box-sizing: border-box;
5
text-decoration: none;
6
list-style: none;
7
}
8
9
body {
10
font-family: 'Ebrima';
11
background-color: #444444;
12
}
13
14
nav#nav_menu_query_off {
15
position: fixed;
16
top: 0;
17
left: 0;
18
width: 200px;
19
height: 100vh;
20
background-color: #222222;
21
overflow: auto;
22
z-index: 2;
23
padding: 20px 0 20px 20px;
24
}
25
26
nav#nav_menu_query_off menu#main_menu li.main_list_item div.menu_header {
27
text-transform: uppercase;
28
padding-bottom: 10px;
29
cursor: pointer;
30
}
31
32
nav#nav_menu_query_off menu li {
33
color: #f0f0f0;
34
}
35
36
nav#nav_menu_query_off menu#main_menu li.main_list_item:not(:first-child) {
37
padding-top: 20px;
38
}
39
40
.active_red {
41
color: red;
42
}
43
44
nav::-webkit-scrollbar {
45
display: none;
46
}
JavaScript
1
36
36
1
<nav id="nav_menu_query_off">
2
<menu id="main_menu">
3
<li class="main_list_item">
4
<div class="menu_header">menu one</div>
5
<div class="menu_body">
6
<menu class="sub_menu"></menu>
7
<menu class="sub_menu"></menu>
8
<menu class="sub_menu"></menu>
9
</div>
10
</li>
11
<li class="main_list_item">
12
<div class="menu_header">menu two</div>
13
<div class="menu_body">
14
<menu class="sub_menu"></menu>
15
<menu class="sub_menu"></menu>
16
<menu class="sub_menu"></menu>
17
</div>
18
</li>
19
<li class="main_list_item">
20
<div class="menu_header">menu three</div>
21
<div class="menu_body">
22
<menu class="sub_menu"></menu>
23
<menu class="sub_menu"></menu>
24
<menu class="sub_menu"></menu>
25
</div>
26
</li>
27
<li class="main_list_item">
28
<div class="menu_header">menu four</div>
29
<div class="menu_body">
30
<menu class="sub_menu"></menu>
31
<menu class="sub_menu"></menu>
32
<menu class="sub_menu"></menu>
33
</div>
34
</li>
35
</menu>
36
</nav>
Please help me out anyone?
Advertisement
Answer
You need to cycle through the other menuHeaders and remove all the active_red
classes first, and then apply the class to the current element.
JavaScript
1
16
16
1
const menuHeaders = document.querySelectorAll('.menu_header');
2
3
function removeClass(els) {
4
els.forEach(mh => mh.classList.remove('active_red'));
5
}
6
7
menuHeaders.forEach(head => {
8
head.addEventListener('click', () => {
9
if (head.classList.contains('active_red')) {
10
removeClass(menuHeaders);
11
} else {
12
removeClass(menuHeaders);
13
head.classList.add('active_red');
14
}
15
});
16
});
JavaScript
1
46
46
1
* {
2
margin: 0;
3
padding: 0;
4
box-sizing: border-box;
5
text-decoration: none;
6
list-style: none;
7
}
8
9
body {
10
font-family: 'Ebrima';
11
background-color: #444444;
12
}
13
14
nav#nav_menu_query_off {
15
position: fixed;
16
top: 0;
17
left: 0;
18
width: 200px;
19
height: 100vh;
20
background-color: #222222;
21
overflow: auto;
22
z-index: 2;
23
padding: 20px 0 20px 20px;
24
}
25
26
nav#nav_menu_query_off menu#main_menu li.main_list_item div.menu_header {
27
text-transform: uppercase;
28
padding-bottom: 10px;
29
cursor: pointer;
30
}
31
32
nav#nav_menu_query_off menu li {
33
color: #f0f0f0;
34
}
35
36
nav#nav_menu_query_off menu#main_menu li.main_list_item:not(:first-child) {
37
padding-top: 20px;
38
}
39
40
.active_red {
41
color: red;
42
}
43
44
nav::-webkit-scrollbar {
45
display: none;
46
}
JavaScript
1
36
36
1
<nav id="nav_menu_query_off">
2
<menu id="main_menu">
3
<li class="main_list_item">
4
<div class="menu_header">menu one</div>
5
<div class="menu_body">
6
<menu class="sub_menu"></menu>
7
<menu class="sub_menu"></menu>
8
<menu class="sub_menu"></menu>
9
</div>
10
</li>
11
<li class="main_list_item">
12
<div class="menu_header">menu two</div>
13
<div class="menu_body">
14
<menu class="sub_menu"></menu>
15
<menu class="sub_menu"></menu>
16
<menu class="sub_menu"></menu>
17
</div>
18
</li>
19
<li class="main_list_item">
20
<div class="menu_header">menu three</div>
21
<div class="menu_body">
22
<menu class="sub_menu"></menu>
23
<menu class="sub_menu"></menu>
24
<menu class="sub_menu"></menu>
25
</div>
26
</li>
27
<li class="main_list_item">
28
<div class="menu_header">menu four</div>
29
<div class="menu_body">
30
<menu class="sub_menu"></menu>
31
<menu class="sub_menu"></menu>
32
<menu class="sub_menu"></menu>
33
</div>
34
</li>
35
</menu>
36
</nav>