|
|
Last updated: 02 Feb 2006
Smart Table of Contents
Content navigation existed long before computers were invented. Table of contents was one of the methods
and served well for centuries. The concept still survives and has found its place among the WWW pages
navigation methods. Many sites (especially with long textual content) employ it.
The static nature of the book meant the table of contents and the content itself had to be in different places.
But it doesn't need to be the same for the web pages.
The javascript snippet offered here will allow placing the content inside the table of contents and navigate it as a
single element.
Both sequential and table of contents navigation is provided. The user can read the contents clicking
Previous/Next links or access parts directly. The DHTML script can also be used to create site dynamic menus.
Script demonstration
Part 1
Prologue
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nullam quis justo sit amet risus
sollicitudin adipiscing. Aliquam tristique tristique erat. Pellentesque habitant morbi tristique
senectus et netus et malesuada fames ac turpis egestas. Aliquam volutpat. Suspendisse potenti.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras convallis tristique nibh. Nullam.
Chapter 1
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam quis quam. Mauris sapien. Quisque
dui eros, porta nec, cursus at, gravida ut.
Chapter 2
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Fusce pretium, magna eget suscipit
rutrum, elit augue semper augue, eget posuere orci mauris et turpis. Sed vitae ipsum vitae lectus
eleifend placerat. In euismod ipsum. Vivamus a mauris. Aenean non urna. Sed sollicitudin. Morbi
ullamcorper ullamcorper magna. Suspendisse dolor. Curabitur leo magna, commodo ac, posuere in,
lacinia sed, ante. Cras tincidunt sem sit amet neque. Proin enim. Aliquam erat volutpat.
Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas.
Fusce at pede sed lorem semper cursus. Morbi ultrices lectus et nunc. Ut purus erat, rutrum at,
rutrum quis, euismod in, mi. Vivamus mi ante, euismod eget, ultricies a, luctus et, orci. Sed
lacinia ante vel turpis aliquet dictum. Pellentesque egestas cursus enim. Vivamus dui.
Mauris at arcu at pede tincidunt posuere. Donec vitae turpis. Fusce leo tortor, cursus vel, feugiat
id, laoreet quis, leo. Phasellus gravida pede id justo. Donec vitae quam. Ut scelerisque lacus
pharetra neque. Nam id purus ac ligula elementum aliquet. Praesent id purus. Donec hendrerit sem
vel justo. Maecenas mattis ultricies erat. Pellentesque habitant morbi tristique senectus et netus
et malesuada fames ac turpis egestas. Sed odio tortor, dignissim ut, gravida a, elementum in,
sapien. Praesent vel elit nec lacus condimentum varius. In iaculis, ligula eu egestas aliquam,
purus turpis consequat metus, vitae euismod dolor nulla quis nunc. Cras mattis, nibh non gravida
pulvinar, sapien urna elementum eros, quis dapibus risus sapien ut lorem. Aliquam nec lectus.
Vivamus venenatis urna vitae justo. Donec vel leo non nisl semper viverra. Duis nunc neque,
ultricies sed, scelerisque id, venenatis ut, risus. Pellentesque ultrices sapien vitae urna.
Vestibulum ante. Vivamus tellus metus, accumsan eget, pulvinar ut, condimentum nec, massa. Aenean
nulla. Duis ullamcorper. Integer ut enim at mauris pharetra sollicitudin. Nulla sit amet justo.
Integer et nunc. Aenean tortor orci, laoreet vitae, scelerisque nec, sollicitudin nec, leo. Sed
rhoncus lacus sed est.
Sed ornare. Suspendisse rutrum lorem vel tortor. In fermentum iaculis mi. Suspendisse ligula. Cras
nonummy odio non lorem. Vestibulum in nunc non pede adipiscing ornare. Donec magna lacus,
scelerisque ut, fermentum vel, tincidunt sed, nunc. Etiam ut leo. Vivamus tristique aliquam nisl.
Donec at nisl. Vestibulum at lacus sed turpis tristique viverra. Vestibulum sem. Maecenas malesuada
tempus augue. Aenean quis enim vitae eros fermentum fringilla. Duis tincidunt turpis vel nisl. Sed
sem dolor, faucibus sit amet, semper vel, condimentum faucibus, magna. Vivamus sollicitudin.
Part 2
Chapter 3
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Cras augue nisi, aliquet eget, semper
nec, ultrices nec, nibh. Sed augue lectus, feugiat quis, consectetuer sit amet, consequat eu,
nulla. Suspendisse placerat, leo sed suscipit tincidunt, pede lorem aliquet felis, sit amet
molestie dolor sapien ac libero. Quisque convallis, libero vel facilisis iaculis, mi dui tempus
lectus, eget vulputate sem elit non lectus. Nam tellus justo, pulvinar id, rutrum eu, scelerisque
sit amet, augue. Vestibulum pellentesque fermentum ligula. Quisque semper, elit at fermentum
accumsan, pede mauris volutpat erat, ac tempor orci nibh vitae mi. Quisque quis neque eu eros
adipiscing tincidunt. Sed lacinia neque sed lacus. Nullam quis elit. Nunc lorem. Donec suscipit.
Donec eleifend.
Etiam in ipsum. Donec euismod. Nullam vitae quam sed risus congue sodales. Nam feugiat leo et
turpis. Nullam elementum ultricies augue. Vestibulum laoreet, odio vel adipiscing elementum, nulla
tortor dignissim dolor, sed luctus libero odio et metus. Praesent non augue a quam imperdiet
dignissim. Integer eget ligula. Ut fermentum feugiat augue. Nulla turpis. Nulla nec mauris. Duis
velit risus, malesuada in, condimentum et, aliquet vitae, urna. Vivamus nonummy enim at felis.
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi urna lorem, rutrum et, aliquet a,
aliquam id, tellus. Pellentesque vel ipsum. Donec rhoncus, lectus quis gravida pulvinar, urna pede
iaculis massa, vel fringilla lectus erat hendrerit nisl. Suspendisse non felis at orci sodales
nonummy. Aliquam euismod mollis urna. Vivamus ante massa, consectetuer eget, congue et, molestie
pellentesque, turpis. Donec gravida nulla nec eros. Mauris massa eros, imperdiet ac, laoreet non,
porttitor eget, metus. Vestibulum imperdiet ultricies tortor. Nam vitae ligula at pede tincidunt
commodo.
Nullam consequat quam porttitor enim. Pellentesque odio mauris, consequat nec, iaculis aliquet,
faucibus non, elit. Cras vitae erat. Fusce blandit. In hac habitasse platea dictumst. Vivamus
ornare tempus tortor. Suspendisse libero odio, lobortis id, tincidunt at, pulvinar quis, ipsum.
Vivamus pharetra leo quis felis. Mauris vel lectus. Nulla facilisi. Pellentesque ut sem a eros
feugiat semper. Maecenas eu mauris. Sed vitae lacus. Pellentesque tristique diam id orci. Proin
blandit, eros a sollicitudin dictum, dolor mauris tempor tortor, fermentum scelerisque massa tortor
ac mi. Vestibulum et ipsum et velit elementum rhoncus. Pellentesque sed odio vel turpis hendrerit
ultricies. Nam molestie turpis vel ligula.
Proin luctus scelerisque tortor. Vestibulum vel metus. Vestibulum ante ipsum primis in faucibus
orci luctus et ultrices posuere cubilia Curae; Mauris rhoncus. Lorem ipsum dolor sit amet,
consectetuer adipiscing elit. Nunc aliquet porta mauris. Cras vestibulum augue sit amet mi.
Maecenas pretium lorem et diam. Nullam sapien odio, auctor in, aliquam ut, pulvinar vel, tellus.
Morbi at elit. Sed vitae nulla. Mauris sagittis purus.
|
Script source code
To use the script perform the following steps:
<script type="text/javascript"><!--
/* Script by: www.jtricks.com
* Version: 20060105
* Latest version:
* www.jtricks.com/javascript/navigation/toc.html
*/
function toc_toggle(obname)
{
ob = document.getElementById(obname);
if (ob.style.display == '')
ob.style.display='none';
else
ob.style.display='';
}
function toc_parent(obsearch, ob)
{
var obp = obsearch;
while (obp != null && obp != ob)
{
obp = obp.parentNode;
}
return obp == ob;
}
function toc_switch(obnameto, obnamefrom)
{
var obto = document.getElementById(obnameto);
var obfrom = document.getElementById(obnamefrom);
var obtry = obfrom;
// Find commn parent
while (!toc_parent(obto, obtry))
{
obtry = obtry.parentNode;
}
var obcommon = obtry;
// Show the DIV/SPAN we switch to
// (up to the common parent)
obtry = obto;
while (obtry != obcommon)
{
if (obtry.nodeName == 'DIV' ||
obtry.nodeName == 'SPAN')
{
obtry.style.display = '';
}
obtry = obtry.parentNode;
}
// Hide the DIV/SPAN we switch from
// (up to the common parent)
obtry = obfrom;
while (obtry != obcommon)
{
if (obtry.nodeName == 'DIV' ||
obtry.nodeName == 'SPAN')
{
obtry.style.display = 'none';
}
obtry = obtry.parentNode;
}
}
//--></script>
- Establish table of conents structure by using the A
and DIV tags. For example:
<a href="javascript:toc_toggle('d_dp1')">Part 1</a><br>
<div id="d_dp1">
<a name="a_dpr"
href="javascript:toc_toggle('d_dpr')">Prologue</a>
<br>
<div id="d_dpr">
----------------------------
First text chapter goes here
----------------------------
<a href="#a_dc1"
onclick="toc_switch('d_dc1', 'd_dpr')">Next</a>
</div>
<a name="a_dc1"
href="javascript:toc_toggle('d_dc1')">Chapter 1</a>
<br>
<div id="d_dc1">
-----------------------------
Second text chapter goes here
-----------------------------
<a href="#a_dpr"
onclick="toc_switch('d_dpr', 'd_dc1')">Previous</a>
</div>
</div>
The A tags, which open/close the
DIV tags just after them, using the toc_toggle() javascript function call, are
placed first. These constructs can be nested. To provide the sequential
navigation method, DIVs can also contain hyperlinks to the beginning of the
next or previous text portion with changing parts visibility through onclick
event.
- Add style information to hyperlinks and DIVs -
margins (margin-left:20px) and default content display mode
(display:none for DIVs to be initially hidden) as
neccessary.
Browser compatibility
The javascript snippet above was tested on the following user agents:
| Modern |
Firefox 1.0.x |
Ok. |
| Opera 8.01 |
Ok. |
| Steam age |
Internet Explorer 6.0 |
Ok. |
| Ancient stuff |
Netscape Navigator 4.79 |
Initially hidden chapters remain hidden. Links downgrade gracefully - they still scroll to apropriate document parts. |
| Internet Explorer 5.5 |
Ok. |
No Javascript or Javascript turned off |
Any |
Initially hidden chapters remain hidden. Links downgrade gracefully - they still scroll to apropriate document parts. |
The compatibility problems can be solved by adding a separate style sheet to hide the needed parts, which will be
added to the document via javascript. This will make all the chapters initally visible for incompatible browsers and
when javascript is turned off.
Donations and Script Rating | If you like our script, please
|
|