Dans ce tutoriel je vous propose de découvrir comment créer un sommaire dynamique en se basant sur les différents niveaux d'entête d'un texte. Nous allons écrire notre JavaScript sans utiliser de librairies externes afin de ne pas avoir de dépendance. Pour accéder aux différents éléments HTML et interagir avec ces derniers, nous allons utiliser les méthodes querySelector et querySelectorAll. Ces méthodes ne sont pas supportées sur de vieux navigateurs tels qu’Internet Explorer 8, ceci n'est pas gênant, car le JavaScript ne sert ici qu'à améliorer l'interface (sans le sommaire le site reste utilisable).
Le principal problème que l'on va rencontrer avec la création de ce sommaire est la mise en place de la structure HTML pour le présenter. En effet, il va falloir faire correspondre le niveau des entêtes avec la profondeur de l'élément dans la liste. Afin de résoudre le problème le plus simplement possible, nous allons utiliser un tableau pour stocker les <ul> qui accueilleront nos éléments. L'index du tableau représentant le niveau de l'entête (un entête h2 sera placé dans un <ul> à l'index 0, un h3 sera placé dans le <ul> à l'index 1...).
Pour organiser notre code proprement nous allons utiliser une classe instanciable en JavaScript.
Pour rendre cette classe instanciable, on va créer une fonction de même nom :
Afin de séparer le code, on va gérer la construction de la structure dans une méthode séparée :
On sépare ici la partie qui permet de greffer l'événement sur les liens afin d'éviter le problème de portée des variables.
Enfin, on crée une dernière méthode qui va permettre d'injecter notre sommaire dans n'importe quel élément HTML :
Ceci est un exemple de classe qui permet de résoudre la problématique initiale, on peut évidemment la personnaliser pour y rajouter différentes options (on peut par exemple ajouter la possibilité de changer le style de liste pour une liste ordonnée). Libre à vous d'adapter le code pour correspondre à vos besoins, le but ici est de comprendre le fonctionnement de base dans la création d'un sommaire automatique.