Tutoriel : créez une FAQ accessible et facile à mettre à jour avec JQuery

Dérouleur de FAQ JQuery

Lorsqu’un site doit être mis à jour par un animateur de contenus dépourvu de compétences techniques en HTML ou Javascript, le développeur a généralement deux alternatives :

  • limiter les possibilités d’édition au strict minimum : pas d’effets, pas de pages dynamiques ; l’animateur va tout péter et appeler au secours après dix minutes d’utilisation. Résultat : en dehors des fonctionnalités techniques pointues, les pages éditables sont tristounes et statiques.
  • créer des outils d’édition sur mesure : interfaces de gestion de contenus, tables de bases de données bien structurées, plugins super élaborés, le tout en langage serveur (PHP, ASP, Ruby…) ; ainsi on s’assure par divers garde-fous que les données sont au format voulu. Le site gagne en dynamisme, mais en contrepartie d’une complexité accrue, tant côté développement qu’administration.

A l’heure de mettre en ligne une FAQ (Foire aux questions), je me suis posé la question suivante : comment concilier la souplesse de mise à jour avec le dynamisme de javascript ? Pour rappel, le fonctionnement classique d’une FAQ est le suivant : une liste de questions rangées par thème, un clic sur la question affichant immédiatement la réponse associée.

Je me suis donc mis en tête d’utiliser la puissance de JQuery et des sélecteurs pour réaliser ce travail. Voici comment procéder, en

1. Créer les balises

Partons d’une structure de pages simple, aisément déclinable : un titre principal (h1), des sections (h2), des questions (h3) et enfin des réponses (p). Il s’agit d’un code facile à produire et à éditer dans un éditeur Wysiwig (ex. TinyMCE). Nous n’allons pas créer une page HTML complète, puisque cette FAQ sera mise à jour par l’animateur de contenus. Le code pourra donc ressembler à ça :

<h1>FAQ de l'administrateur</h1> <h2>Section 1 : Connexion</h2> <h3>Comment puis-je m'inscrire ?</h3> <p>L'inscription est gratuite et ouverte à tout le monde. Cliquez sur le lien "inscription" présent à droite du logo.</p> <h3>Je suis inscrit, mais le site ne me reconnaît pas. Comment faire ?</h3> <p>Cliquez sur "connexion" puis saisissez l'adresse e-mail ainsi que le mot de passe saisis lors de votre inscription. </p> <h2>Section 2 : Publication</h2> <h3>Comment publier un article</h3> <p>Après vous être connecté, vous pourrez immédiatement proposer un article en cliquant sur "publier un article" dans le menu de gauche. Votre article sera relu par notre comité de rédaction qui décidera de le publier ou non.</p> 

2. Un peu de mouvement avec jquery

Nous souhaitons maintenant que ce texte se comporte comme une FAQ. Nous voulons donc pour chaque question :

  • masquer/replier la réponse associée au chargement de la page
  • afficher la question comme un lien (par ex. bleu, souligné, avec un curseur en forme de pointeur)
  • lors d’un clic sur la question, basculer l’état du paragraphe qui suit : visible s’il était masqué, masqué s’il était visible.

JQuery rend cette manipulation extrèmement aisée. Voici le code nécessaire :

// On inclut le source JQuery (en head) <script type="text/javascript" src="jquery-1.2.3.min.js"></script> <script type="text/javascript"> // On lance la boucle sur tous les H3 $('h3').each(function() {     // On masque le paragraphe qui suit     $(this).next('p').hide();     // On copie le style des balises A     var couleurLien = $('a').css("color");     $(this).css({"text-decoration" : "underline", "color" : couleurLien, "cursor":"pointer"});     // A chaque clic, on bascule l'état de l'élément P suivant     $(this).click(function() {         $(this).next('p').toggle();     }); }); </script>

Et voilà ! Votre FAQ s’anime et réagit à chacun des clics. Il reste à choisir d’inclure le code en intégralité, ou le lier sous forme externe dans une balise SCRIPT directement à la fin du code source éditable (avec le risque que l’utilisateur l’efface) ou de le charger sur toutes les pages de votre site, en le déclenchant uniquement lorsqu’une condition est remplie (par exemple en fonction de l’url, ou encore en détectant la présence d’un ID d’élément particulier).

Attention cependant : la réponse à chaque question ne doit comporter qu’un seul paragraphe. Les éventuels sauts de ligne auront la forme de balises BR exclusivement.

Démonstration

 

Conclusion

On fait en toute simplicité un pas supplémentaire vers la séparation entre la forme et le contenu. De plus, cette méthode se dégradera grâcieusement sur les dispositifs ne disposant pas de Javascript.

Mise à jour 23 juillet 2008 : pour l’impression, il est nécessaire de dérouler l’ensemble des réponses, sinon il n’affichera que les titres. Pour cela, on crée avec JQuery un lien « version imprimable » qui se contente d’afficher tous les paragraphes et d’appeler la fonction window.print(). Le code :

  On crée l'élément "version imprimable" qu'on insère avant le H1 du titre var imprimer = document.createElement('a'); imprimer.id = "imprimer"; imprimer.innerHTML = "Version Imprimable"; $(imprimer).insertBefore('h1'); A chaque clic sur cet élément, les P sont affichés et l'impression peut se lancer. $('#imprimer').click(function() {     $('p').show();     window.print(); }); 

 

Outil de référencement professionnel - essai gratuit Ce contenu a été publié dans Webdesign, avec comme mot(s)-clé(s) , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

16 réponses à Tutoriel : créez une FAQ accessible et facile à mettre à jour avec JQuery

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *