<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
</head>
<body>
<h1><a href="http://stackoverflow.com/questions/17636371/">Javascript
styling if specific content is present or hovered</a>
</h1>
<h3>Made by using Plnkr.co!</h3>
<div>
The main navigation should do the following
<ol>
<li>on hover change background color and show matching sub-navigation</li>
<li>on mouseout keep background color of main navigation and show subnavigation</li>
<li>unless another main navigation is hovered then drop background-color and start at 1 for new main nav</li>
</ol>
</div>
<h2>Demo</h2>
<ul id="mainNav">
<li id="Home" class="mainNav Home" onmouseover="navHover('Home')"><a href="#">Home</a></li>
<li id="Portfolio" class="mainNav Portfolio" onmouseover="navHover('Portfolio')"><a href="#">Portfolio</a></li>
<li id="Tutorials" class="mainNav Tutorials" onmouseover="navHover('Tutorials')"><a href="#">Tutorials</a></li>
<ul id="mainNav_Drop">
<li class='mainNav_Drop_Home'><a href='#'></a></li>
</ul>
</ul>
<script>
function setSubNav(navClass, navItems)
{
var elNavDrop=document.getElementById('mainNav_Drop'); // renamed since this returns an element not only an id
var subNavList ="";
// .forEach requires a shim --> http://stackoverflow.com/questions/9329446/for-each-in-an-array-how-to-do-that-in-javascript
navItems.forEach(function(navItem) {
subNavList += "<li class='" + navClass +"'><a href='#'>" + navItem +"</a></li>";
});
elNavDrop.innerHTML =subNavList;
return;
};
function removeHoverState(mainNavId, classToRemove){
// console.log("mainNavId = " + mainNavId);
// remove class --> http://stackoverflow.com/questions/2155737/
document.getElementById(mainNavId).className =
document.getElementById(mainNavId).className.replace('wasHovered','');
};
function navHover(cls){
// remove the hover class from all entries
var mainNavIds = ["Home", "Portfolio", "Tutorials"];
mainNavIds.forEach(function(mainNavId){
removeHoverState(mainNavId, "wasHovered")});
var elMainNav = document.getElementById(cls);
if(elMainNav.className.indexOf("wasHovered") == -1) { elMainNav.className += " wasHovered";};
switch(cls){
case("Home"):
setSubNav('mainNav_Drop_Home', ["Home"]);
break;
case("Portfolio"):
var naItemsPortfolio = ["Qualifications", "Services", "Portfolio", "Case Studies"];
setSubNav('mainNav_Drop_Portfolio', naItemsPortfolio);
break;
case("Tutorials"):
var naItemsTutorials = ["HTML5", "CSS3", "WordPress", "Design"];
setSubNav('mainNav_Drop_Tutorials', naItemsTutorials);
break;
default:
elNavDrop.innerHTML="<li><a href='#'></a></li>"
}
};// end of navHover
</script>
</body>
</html>
// Code goes here
/* Styles go here */
.wasHovered { background-color: orange}
li.mainNav:hover {background-color: orange}