Powered by vanilla & lovin' it!
window.onload=expand;
function expand(id) {
var d = document.getElementById(id);
for (var i = 1; i<=10; i++) {
if (document.getElementById('menu'+i)) {document.getElementById('menu'+i).style.display='none';}
}
if (d) {d.style.display='block';}
}<div id="menu">
<ul>
<li class="welcome">Hello, <a href="#">User Name</a></li>
<li onclick="javascript:expand();"><a href="#" class="home_link">Home Page</a></li>
<li onclick="javascript:expand();"><a href="#" class="messages_link">Messages</a></li>
<li onclick="javascript:expand('menu2');"><a href="#" class="users_link">Users <span class="expand">+</span></a>
<ul id="menu2">
<li><a href="#" class="usersedit_link">Add / Edit / Delete</a></li>
<li><a href="#" class="userslogins_link">Logins</a></li>
</ul>
</li>
...
</div>
<script type="text/javascript">
function changeStatus(txt){
document.getElementById('status').innerHTML = txt;
}
</script><li onclick="javascript:expand('menu2');changeStatus('-');"><a href="#" class="users_link">Users <span class="expand"><div id="status">+</div></span></a><span class="expand"> to <span class="collapse">
window.onload=MenuClicks;
function MenuClicks() {
var mLis = document.getElementById('menulist').getElementsByTagName('li');
for (var n = 0; n < mLis.length; n++) {
if (mLis[n].getElementsByTagName('ul').length > 0) {
mLis[n].getElementsByTagName('ul')[0].style.display ='none';
}
mLis[n].onclick = function() {
var cLis = document.getElementById('menulist').getElementsByTagName('li');
var cSpan = this.getElementsByTagName('span')[0];
var cUl = this.getElementsByTagName('ul')[0];
var cId = (cUl) ? cUl.id : '';
var cStyle = (cUl) ? cUl.style.display : 'none';
for (var n = 0; n < cLis.length; n++) {
if(typeof(cLis[n].getElementsByTagName('ul')[0]) != "undefined" ) {
if(cLis[n].getElementsByTagName('ul')[0].id != cId || cStyle == 'block') {
cLis[n].getElementsByTagName('ul')[0].style.display = 'none';
cLis[n].getElementsByTagName('span')[0].className = 'expand';
} else if (cStyle == 'none') {
cLis[n].getElementsByTagName('ul')[0].style.display = 'block';
cLis[n].getElementsByTagName('span')[0].className = 'collapsed';
}
}
}
}
}
}
it adds the javascript onclicks at page load and thus skinny's down your html. it also means your menu can now use "id"s that mean something rather than "menu1" and "menu2" etc. <div id="menu">
<p class="welcome">Hello, <a href="#">Dave</a></p>
<ul id="menulist">
…
<li><a href="#" class="users_link">Users <span class="expand">+</span></a>
<ul id="users">
<li><a href="#" class="usersedit_link">Add / Edit / Delete</a></li>
<li><a href="#" class="userslogins_link">Logins</a></li>
</ul>
</li>
…
</ul>
</div>
<div id="menu">
<p class="welcome">Hello, <a href="#">Dave</a></p>
<ul id="menulist">
…
<li id="users_menu" class="collapsed">
<a href="#" class="users_link">Users <span>+</span></a>
<ul>
<li><a href="#" class="usersedit_link">Add / Edit / Delete</a></li>
<li><a href="#" class="userslogins_link">Logins</a></li>
</ul>
</li>
…
</ul>
</div>which leads to shorter js - always a good thingfunction MenuClicks() {
var mLis = document.getElementById('menulist').getElementsByTagName('li');
for (var n = 0; n < mLis.length; n++) {
mLis[n].onclick = function() {
var cLis = document.getElementById('menulist').getElementsByTagName('li');
for (var n=0; n < cLis.length; n++){
if (cLis[n].id != this.id || this.className != 'collapsed') {
cLis[n].className='collapsed';
} else if (this.className == 'collapsed') {
cLis[n].className = 'expanded'
}
}
}
}
}and with an additional css.collapsed ul, .collapsed span { display: none;}
1 to 9 of 9