Projet 3 jQuery
Création d’une table des matières dynamique
-
Objectifs
- Utiliser Jquery pour créer une table des matières dynamique
-
Présentation
-
Description
- Une table des matières est un moyen courant pour permettre aux utilisateurs d’accéder rapidement à la section de contenu
qu’ils cherchent. - Avec jQuery, il est possible de créer dynamiquement une table des matières, basée sur les éléments
<header>
HTML de la page. - Ceci est très utile pour les articles de blog ou d’autres sites qui ont beaucoup de pages de contenu différentes.
-
Fichiers
- Créez les trois fichiers projet03.html, projet03.css et projet03.js et laissez ouverts et prêt pour l’édition.
- Une fois les fichiers requis créés, procédez comme suit pour créer une table dynamique du contenu:
- Comment faire…
- Créez une page Web de base en utilisant le code HTML suivant, en l’ajoutant à la projet03.html:
- La Page HTML
- Ajoutez le code HTML suivant à projet03.html dans les balises de body que vous venez de l’ajouter; cela va créer une page avec un contenu en sections et un élément de liste ordonné qui peut être rempli avec du contenu:
- La Page CSS
- Ajoutez le CSS suivant à projet03.css pour ajouter des styles de base à cette page.
- La Page JS
- Ajoutez le code jQuery suivant à projet03.js, qui remplira la liste ordonnée sur la base des sections en-tête de la page HTML que nous venons de créer:
- Comment ça fonctionne…
- Ouvrir la projet03.html dans une page Web vous présentera le contenu à gauche côté de l’écran et la liste de contenu générée dynamiquement à droite comme illustré dans la capture d’écran suivante:
- Le code HTML fournit un volet de contenu avec diverses sections intitulées h1, h2, h3 et h4 balises et un élément de liste ordonné vide.
- Notre code jQuery sélectionne d’abord la section de contenu, puis trouve tous les éléments d’en-tête à l’intérieur en utilisant la fonction jQuery
find()
et en spécifiant h1, h2, h3, h4 comme seul argument. Cela va créer un tableau des éléments trouvés et les stocker dans les _headers tableau comme indiqué dans l’extrait de code suivant: - Explication
- En utilisant la fonction
jQuery each ()
, il est alors possible de parcourir tous les en-têtes trouvés éléments et construire la table des matières. - La variable locale
_header
est d’abord déclarée et l’élément d’en-tête actuel est stocké dans cette variable. - Pour pouvoir mettre en retrait des sous-sections dans la table des matières, ce qui permet à l’utilisateur de voir plus facilement la structure du contenu, le code doit déterminer à quel niveau l’en-tête actuel est: h1 étant le niveau supérieur et h5 étant le bas.
- En utilisant
_header.context.localName
, nous pouvons obtenir la balise de l’élément d’en-tête (par exemple, h1) et supprimer le « h » avec le JavaScriptremplacer()
. - Ensuite, nous pouvons convertir la valeur restante en un entier en utilisant
parseInt ()
. nous se retrouvent avec une valeur que nous pouvons utiliser pour déterminer le niveau de l’élément d’en-tête. Ce processus est illustré dans l’extrait de code suivant: - Nous pouvons maintenant créer l’élément list, que nous insérerons dans la liste ordonnée. Afin de lier les éléments de la table des matières à la section de contenu appropriée, nous devons vérifier voir si l’élément d’en-tête a un ID auquel nous pouvons nous lier.
- Si c’est le cas, nous créons une liste élément avec un lien; sinon, nous créons un élément de liste de base en exécutant le code suivant:
- Enfin, une fois l’élément de liste créé, la fonction
css ()
et la variablelevel
sont utilisé pour ajouter le remplissage requis pour l’indentation et l’élément de liste créé est ajouté à la liste ordonnée du contenu.
<!DOCTYPE html>
<html>
<head>
<title>Chapter 6 :: Recipe 5</title>
<script src="https://code.jquery.com/jquery-1.10.2.js"></script>
<link href="projet03.css" rel="stylesheet" type="text/css" />
<script src="projet03.js"></script>
</head>
<body>
</body>
</html>
<div class="header">
<h1>TABLE DES MATIÈRES DYNAMIQUE</h1>
</div><div class="content-frame">
<div class="left">
<h1 id="one">TITRE PRINCIPAL</h1>
<ul>
<li>Une table des matières est un moyen courant pour permettre aux utilisateurs d'accéder rapidement à la section de contenu
qu'ils cherchent.</li>
<li> Avec <strong>jQuery</strong>, il est possible de créer dynamiquement une table des matières, basée sur les éléments <code><header></code> HTML de la page.</li>
<li>Ceci est très utile pour les articles de blog ou d'autres sites qui ont beaucoup de pages de contenu différentes.</li>
</ul>
<h2 id="two">SOUS-TITRE</h2>
<ul>
<li>Créez les trois fichiers projet03.html, projet03.css et projet03.js et laissez ouverts et prêt pour l'édition.</li>
<li>Une fois les fichiers requis créés, procédez comme suit pour créer une table dynamique du contenu:</li>
</ul>
<h3 id="three">SOUS-TITRE</h3>
<p>Notre code jQuery sélectionne d'abord la section de contenu, puis trouve tous les éléments d'en-tête
à l'intérieur en utilisant la fonction jQuery find () et en spécifiant h1, h2, h3, h4 comme seul
argument. Cela va créer un tableau des éléments trouvés et les stocker dans les _headers
tableau comme indiqué dans l'extrait de code suivant:</p>
<h2 id="four">SOUS-TITRE</h2>
<p>Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<h3 id="five">SOUS-SOUS-TITRE</h3>
<p>Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<p>Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
<h4 id="six">SOUS-SOUS-SOUS-TITRE</h4>
<p>Ut enim ad minim veniam, quis nostrud exercitation
ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>
</div>
<div class="right">
<h2>CONTENTS</h2>
<ol class="contents"></ol>
</div>
</div>
@import url(https://fonts.googleapis.com/css?family=Ubuntu);
body {
margin: 0;
background-color: #5dace7;
font-family: 'Ubuntu', sans-serif;
}
.header {
height: 150px;
background-color: #0174cd;
}
.header h1 {
width: 1000px;
margin: auto;
padding: 0;
line-height: 100px;
font-size: 40px;
color: #FFFFFF;
}
.content-frame {
margin: -50px auto auto auto;
width: 1000px;
background-color: #FFFFFF;
border-radius: 10px;
min-height: 1300px;
position: relative;
}
.content-frame .left {
margin-right: 240px;
padding: 20px;
}
.content-frame .left h1 {
margin: 0;
}
.content-frame .right {
width: 200px;
padding: 10px;
position: absolute;
top: 0;
bottom: 0;
right: 0;
background-color: #F1F1F1;
border-top-right-radius: 10px;
border-bottom-right-radius: 10px;
}
.content-frame .right h2 {
margin: 0;
padding: 0;
}
$(function(){
var _contents = $('.content-frame .left');
var _headers = _contents.find("h1, h2, h3, h4");
_headers.each(function(index, value){
var _header = $(value);
var level = parseInt(_header.context.localName.
replace("h", ""));
if (typeof _header.attr("id") != "undefined") {
var listItem = $("<li><a href='#" + _header.attr("id")
+ "'>" + _header.html() + "</a></li>");
} else {
var listItem = $("<li>" + _header.html() + "</li>");
}
listItem.css("padding-left", (level * 5));
$('.contents').append($(listItem));
});
});
$(function(){
var _contents = $('.content-frame .left');
var _headers = _contents.find("h1, h2, h3, h4");
// --- HIDDEN CODE
});
$(function(){
var _contents = $('.content-frame .left');
var _headers = _contents.find("h1, h2, h3, h4");
_headers.each(function(index, value){
var _header = $(value);
var level = parseInt(_header.context.localName.replace("h",
""));
// --- HIDDEN CODE
});
});
$(function(){
var _contents = $('.content-frame .left');
var _headers = _contents.find("h1, h2, h3, h4");
_headers.each(function(index, value){
var _header = $(value);
var level = parseInt(_header.context.localName.replace("h",
""));
if (typeof _header.attr("id") != "undefined") {
var listItem = $("<li><a href='#" + _header.attr("id") +
"'>" + _header.html() + "</a></li>");
} else {
var listItem = $("<li>" + _header.html() + "</li>");
}
listItem.css("padding-left", (level * 5));
$('.contents').append($(listItem));
});
});
Source: inspiration du livre JQuery 2.0 Development Cookbook
Auteurs: Revill, Leon