In your code snippet provided you use only one element with id=submenu
but i think if this is a real menu then this is not a correct scenario.
So assuming that your menu will have more than one sub-menus, and without having to change markup to nest the sub-menu inside another element along with it's anchor i have prepared a small snippet for you to check.
Only some minor CSS
changes where made to place the sub-menu directly under it's parent anchor.
In the below snippet all anchor elements have a sub-menu so in order to bind anchor and sub-menu data-id
attribute was used in anchor and a matching id
was used for the sub-menu.
let links = document.querySelectorAll("a");
links.forEach(link => link.addEventListener('click', function(e){
let active = document.querySelectorAll('div.active:not(#'+e.target.dataset.id+')');
active.forEach(function(el) {
if(el.id!==e.target.dataset.id) {el.classList.remove('active');
}
});
let sub = document.getElementById(e.target.dataset.id);
sub.classList.toggle('active');
})
);
* {
box-sizing: border-box
}
a {
text-decoration: none
}
body {
font-family: Calibri;
padding-top: 30px;
}
.menu {
border: 1px solid red;
padding: 10px;
display: flex;
flex-flow: row nowrap;
height: 65px;
}
.menu>a {
position: relative;
}
.menu>a,
.submenu>a {
left: 0;
width: 100px;
line-height: 40px;
text-align: center;
background-color: rgb(238, 238, 238);
border-right: 1px solid black;
}
.menu>a:hover,
.submenu>a:hover {
background-color: #fff;
}
.menu>.submenu {
display: none;
flex-flow: column nowrap;
position: relative;
top: 45px;
margin-left:-100px;
}
.menu>.submenu.active {
display:flex;
}
<div class="menu">
<a href="#" data-id="sub1">Menu Item</a>
<div class="submenu" id="sub1">
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
</div>
<a href="#" data-id="sub2">Menu Item</a>
<div class="submenu" id="sub2">
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
</div>
<a href="#" data-id="sub3">Menu Item</a>
<div class="submenu" id="sub3">
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
</div>
<a href="#" data-id="sub4">Menu Item</a>
<div class="submenu" id="sub4">
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
<a href="#">Sub Menu</a>
</div>
</div>