# Table des matières automatique
Sur le site du
HTML hollandaisvolant
on trouve un bout de javascript pour obtenir une table des matières
automatique à partir des titres présents
dans une page.
Je l'ai un peu modifié pour qu'il ne tienne pas compte des "h1" car
c'est souvent le titre de la page, et qu'il rajoute des "id" vers les
différentes parties s'il n'y en a pas déjà.
Par ailleurs, la table des matières n'apparaît que s'il y a plus de 3
titres dans une page.
Afin d'en profiter, il suffit d'insérer dans le code html la balise
suivante :
```
HTML URL:ul id="toc"</ul>
```
Voici la fonction qui se charge d'afficher la table des matières:
```
/* display toc */
function toc() {
var TOC = document.getElementById('toc'),
headings = document.querySelectorAll('h2, h3, h4, h5, h6'),
parentLevel = 2,
tocn = 0,
cursorNode = TOC;
if (headings.length < 3) {
return;
} else {
TOC.style.display = 'block';
}
for (var i = 0, len = headings.length ; i < len ; ++i) {
var currentHeading = headings[i];
var newLevel = parseInt(currentHeading.tagName.substr(1,1));
var diff = newLevel - parentLevel;
if (diff > 0) {
var containerLiNode = cursorNode.lastChild;
var ulNode = document.createElement('UL')
containerLiNode.appendChild(ulNode);
cursorNode = ulNode;
parentLevel = newLevel;
}
if (diff < 0) {
while (0 !== diff++) {
cursorNode = cursorNode.parentNode.parentNode;
}
parentLevel = newLevel;
}
var liNode = document.createElement('LI');
if (!(currentHeading.hasAttribute('id'))) {
tocn++;
currentHeading.setAttribute('id', "toc"+tocn);
}
var link = document.createElement('A');
link.setAttribute('href', '#' + currentHeading.getAttribute('id'));
link.appendChild(document.createTextNode(currentHeading.textContent))
liNode.appendChild(link);
cursorNode.appendChild(liNode);
}
}
```