Switch content (unobtrusive js)

This is the same as this page but changed a little to allow for links on other parts of the page to show the stories. A link can be added by using the same 'href' things as in these links (e.g. '#storyB') and adding the class 'link' to the link.

Here's an example: Story C (<a href="#storyC" class="link">Story C</a>)

Explanation : Part 1

When the page loads, the hidetstories() function is called (with the 'window.onload' bit). This finds the #tstories div then hides all the divs inside that with the class 'story' and makes them 'display:none;'. Then, to show the first story onload, a variable is sent to the tstories() function.

The tstories() function assigns another function (with no name) to the onclick event of each of the links at the top. It finds the element with the id #thebuttons and identifies the links in that. The function that is attached to the links first runs the hidetstories() function, then takes the part of the link after the '#' and turns it into a variable. The div that was being linked to is then displayed ('display:block;') and the link itself returns false.

Explanation : Part 2

The good thing about this is that if javascript is disabled, the links will work as normal and all the content will still be readable.

The bad thing about this - just like on (the page I had here before) - is that when the page first loads, you can see all of the content for a second before the javascript kicks in and hides it. If you're on an intranet and are able to control the browsers, or if you just don't care about those without javascript, you can fix this by setting the class 'story' to 'display:none;' in your CSS.

Explanation : Part 3

Another small point is that I haven't added anything here that highlights the current content in the menu at the top. It's not too difficult to do, I just wanted to keep this as simple as possible. Here's an example.

Of course, you can also do this whole 'switch content' thing with AJAX. My demo uses AJAX (basically javascript, php, and the xml 'httprequest') to change the content of the page by only refreshing the content part. This also doesn't work if javascript is disabled, so my demo uses PHP to include the content into a template page if the javascript fails.

HTML
<h1>Switch content (unobtrusive js)</h1>
<p>This is the same as <a href="~switchcontent3">this page</a> but changed a little to allow for links on other parts of the page to show the stories. A link can be added by using the same 'href' things as in these links (e.g. '#storyB') and adding the class 'link' to the link.</p>
<p>Here's an example: <a href="#storyC" class="link">Story C</a> (&lt;a href=&quot;#storyC&quot; class=&quot;link&quot;&gt;Story C&lt;/a&gt;)</p>
<ul id="thebuttons">
<li><a href="#storyA">Story A</a></li>
<li><a href="#storyB">Story B</a></li>
<li><a href="#storyC">Story C</a></li>
</ul>
<div id="tstories">
<div id="storyA" class="story">
<h2>Explanation : Part 1</h2>
<p>When
the page loads, the hidetstories() function is called (with the
'window.onload' bit). This finds the #tstories div then hides all the
divs inside that with the class 'story' and makes them 'display:none;'.
Then, to show the first story onload, a variable is sent to the tstories() function.</p>
<p>The
tstories()
function assigns another function
(with no name) to the onclick event of each of the links at the top. It
finds the element with the id #thebuttons and identifies the links in
that. The function that is attached to the links first runs the
hidetstories() function, then takes the part of the link after the '#'
and turns it into a variable. The div that was being linked
to is then displayed ('display:block;') and the link itself returns
false.</p>
</div>
<div id="storyB" class="story">
<h2>Explanation : Part 2</h2>
<p>The
good thing about this is that if javascript is disabled, the links will
work as normal and all the content will still be readable.</p>
<p>The bad thing about this - just like on (<a href="http://bonrouge.com/~switchcontent">the page I had here before</a>)
- is that when the page first loads, you can see all of the content for
a second before the javascript kicks in and hides it. If you're on an
intranet and are able to control the browsers, or if you just don't
care about those without javascript, you can fix this by setting the
class 'story' to 'display:none;' in your CSS.</p>
</div>
<div id="storyC" class="story">
<h2>Explanation : Part 3</h2>
<p>Another
small point is that I haven't added anything here that highlights the
current content in the menu at the top. It's not too difficult to do, I
just wanted to keep this as simple as possible. <a href="http://bonrouge.com/~switchcontent4">Here's an example</a>.</p>
<p>Of course, you can also do this whole 'switch content' thing <a href="http://bonrouge.com/~ajaxswitch">with&nbsp;AJAX</a>.
My demo uses AJAX (basically javascript, php, and the xml 'httprequest')
to change the content of the page by only refreshing the content part.
This also doesn't work if javascript is disabled, so my demo uses PHP
to include the content into a template page if the javascript fails.</p>
</div>
</div>
CSS
#thebuttons {
list-style:none;
width:24em;
margin:auto;
}
#thebuttons li {
float:left;
width:8em;
font-weight:bold;
background-color:yellow;
padding:0.5em 0;
margin:1em auto;
text-align:center;
}
#tstories {
width:30em;
margin:1em auto;
border:1px solid purple;
clear:left;
padding:1em;
}
Javascript
function hidetstories() {
var divs=document.getElementById('tstories').getElementsByTagName('div');
for (j=0; j<divs.length; j++) {
var rE = new RegExp("(^|\\s)" + 'story' + "(\\s|$)");
if (rE.test(divs[j].className)) {
divs[j].style.display="none";
}
}
}
function anon(el) {
hidetstories();
var thestory=(el.href).split("#",2)[1];
document.getElementById(thestory).style.display="block";
return false;
}
function tstories(first) {
var thebuttons=document.getElementById('thebuttons').getElementsByTagName('a');
for (i=0; i<thebuttons.length; i++) {
thebuttons[i].onclick=function() {anon(this)}
}
var els=document.getElementsByTagName('a');
var rE = new RegExp("(^|\\s)" + 'link' + "(\\s|$)");
for (j=0; j<els.length; j++) {
if (rE.test(els[j].className)) {
els[j].onclick=function () {anon(this);}
}
}
if (first) {
var firstone=document.getElementById('tstories').firstChild;
if (firstone.nodeType != 1) {firstone = firstone.nextSibling;}
firstone.style.display="block";
}
}
window.onload=function() {
hidetstories();
tstories(1);
}

Comments

#1
2022-09-28 WbzwWhits says :

why is furosemide called lasix <a href="https://lasixona.com/ ">furosemide 40 mg for dogs</a> furosemide vs spironolactone

Comment form

Please type the word 'brown' here:

BB code available :

  • [b]...[/b] : bold
  • [it]...[/it] : italic
  • [q]...[/q] : quote
  • [c]...[/c] : code
  • [url=...]...[/url] : url