10-12-2008, 07:26 AM
(Modification du message : 10-12-2008, 07:47 PM par Sephi-Chan.)
Bonjour,
voilà, je me suis enfin collé à jquery, il ya à peine qlques heures.
J'ai lu qques tutos, et je m'aide surtout de de http://jquery.developpeur-web2.com/documentation.php
Pour débuter, j'ai fait qlques tests basiques, je suis d'ailleurs conquis par la puissance de la bête, puis là jme colle à un ptit exercice : réaliser une table des matières dynamique d'une page html.
Il faut donc parcourir tous les éléments d'une page, ne retenir que les titres H*, leur coller une ancre, et alimenter notre table des matières avec le "titre du titre" et avec le lien qui va bien pour s'y rendre.
Voilà mon code :
voilà, je me suis enfin collé à jquery, il ya à peine qlques heures.
J'ai lu qques tutos, et je m'aide surtout de de http://jquery.developpeur-web2.com/documentation.php
Pour débuter, j'ai fait qlques tests basiques, je suis d'ailleurs conquis par la puissance de la bête, puis là jme colle à un ptit exercice : réaliser une table des matières dynamique d'une page html.
Il faut donc parcourir tous les éléments d'une page, ne retenir que les titres H*, leur coller une ancre, et alimenter notre table des matières avec le "titre du titre" et avec le lien qui va bien pour s'y rendre.
Voilà mon code :
Code PHP :
<?php
// --- table des matières ---
// tableau des titres
var tdm = Array();
// on parcours la page à la recherche des titres H*
$("#main").children().each(function(){
// si c'est bien un titre h*
if ($(this).is("h1") || $(this).is("h2") || $(this).is("h3") || $(this).is("h4") || $(this).is("h5") || $(this).is("h6")) {
// on ajoute le nom du titre au tableau
tdm[tdm.length] = $(this).text();
// on entoure le titre d'une ancre unique
$(this).wrap('<a name="tdm' + tdm.length + '"></a>');
}
});
// - si ya au moins 1 titre
if (tdm.length > 0) {
// on créé le div de la table des matières, et la liste (ul) des titres
$("#main").prepend('<div id="tdm"><strong>Table des matières</strong><ul></ul></div>');
// on parcours le tableau et on ajoute des LI avec un lien vers l'ancre du titre
for (var i = 0; i < tdm.length; i++) {
$("#tdm ul").append('<li><a href="#tdm' + (i+1) + '">' + tdm[i] + "</a></li>");
}
}
Ce n'est sûrement pas parfait (les suggestions sont les bienvenues) mais ça fonctionne (test ici : http://isoat.org/test/tdm/ ).
Mon souci, c'est que je voudrais parcourir tous les enfants de l'élément BODY, toute la page quoi, mais impossible... J'ai tenté ça :
Code :
$("body")
$(document.body)
Pour l'instant je suis obligé de passer par un div#main pour pouvoir utiliser :
Code :
$("#main").children().each(function(){ ... }
et
$("#main").prepend( ... )
Quelle est l'astuce pour parcourir tous les éléments H* du document sans préciser un div comme parent ?