This is a quick tutorial to explain how you can easily show and hide page elements with javascript.
To begin with, each item that you want to hide/show should have a unique HTML ID. Let’s begin with a very simple HTML page.
<h1>This is my title</h1> <div id="content"> <h2>Div1 Follows</h2> <div id="div1"> This is where my first div will be. </div> <h2>Div2 Follows</h2> <div id="div2"> This is where my second div will be. </div> </div>
We will then write a function that will hide all of the appropriate divs (in this case, div1 and div2).
function hideAll() { var myDivs = Array('div1','div2') // Add each div ID to this array for(var i in myDivs) { if(document.getElementById(myDivs[i]) { document.getElementById(myDivs[i]).style.display = 'none'; } } }
That function, when called, will hide all of the divs that are included in the “myDivs” array. However, we need a way to show the appropriate divs again, so we are going to modify the function slightly to insert a new link where the div should be.
function hideAll() { var myDivs = Array('div1','div2') // Add each div ID to this array for(var i in myDivs) { if(document.getElementById(myDivs[i])) { document.getElementById(myDivs[i]).style.display = 'none'; if(!document.getElementById('linkto_'+myDivs[i])) { var myLink = document.createElement('a'); myLink.id = 'linkto_'+myDivs[i]; myLink.href = '#'+myDivs[i]; myLink.onclick = function() { showDiv(this.href); //return false; //uncomment this line and comment or remove the next line if you don't want the page to jump to the revealed div when the link is clicked return true; }; myLink.appendChild(document.createTextNode('Expand this entry')); document.getElementById(myDivs[i]).parentNode.insertBefore(myLink,document.getElementById(myDivs[i]).nextSibling); } } } }
Now that we’ve inserted links that will show the divs, we need to actually write the function that’s going to reveal the div when the link is clicked.
function showDiv(what) { hideAll(); // Comment this line out if you don't want the rest of the divs to be hidden when you reveal a new one what = what.split('#'); // If our div name/ID includes the hash symbol, we'll split it at that point what = what.pop(); // The function above turned our div name/ID into an array. This will grab the last element of the array if(document.getElementById(what)) { document.getElementById(what).style.display = ''; if(document.getElementById('linkto_'+what)) { document.getElementById('linkto_'+what).parentNode.removeChild(document.getElementById('linkto_'+what)); } } }
Now, we’ll put these two functions together at the very bottom of our document (just above the closing body tag) and will then call the appropriate functions. I’ve also added a little bit of script that will check to see if someone loaded the page trying to access a specific div, and will show that div if so. Therefore, the entire body section of our HTML page will look like:
<body> <h1>This is my title</h1> <div id="content"> <h2>Div1 Follows</h2> <div id="div1"> This is where my first div will be. </div> <h2>Div2 Follows</h2> <div id="div2"> This is where my second div will be. </div> </div> <script type="text/javascript"> function hideAll() { var myDivs = Array('div1','div2') // Add each div ID to this array for(var i in myDivs) { if(document.getElementById(myDivs[i])) { document.getElementById(myDivs[i]).style.display = 'none'; if(!document.getElementById('linkto_'+myDivs[i])) { var myLink = document.createElement('a'); myLink.id = 'linkto_'+myDivs[i]; myLink.href = '#'+myDivs[i]; myLink.onclick = function() { showDiv(this.href); //return false; //uncomment this line and comment or remove the next line if you don't want the page to jump to the revealed div when the link is clicked return true; }; myLink.appendChild(document.createTextNode('Expand this entry')); document.getElementById(myDivs[i]).parentNode.insertBefore(myLink,document.getElementById(myDivs[i]).nextSibling); } } } } function showDiv(what) { hideAll(); // Comment this line out if you don't want the rest of the divs to be hidden when you reveal a new one what = what.split('#'); // If our div name/ID includes the hash symbol, we'll split it at that point what = what.pop(); // The function above turned our div name/ID into an array. This will grab the last element of the array if(document.getElementById(what)) { document.getElementById(what).style.display = ''; if(document.getElementById('linkto_'+what)) { document.getElementById('linkto_'+what).parentNode.removeChild(document.getElementById('linkto_'+what)); } } } hideAll(); if(window.location.hash) { showDiv(window.location.hash); } </script> </body>
Post Your Comment