Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript > Bibliothèques & Frameworks > jQuery
jQuery Forum d'entraide sur le framework jQuery. Avant de poster : Tutoriels jQuery, FAQ jQuery, Tous les tutoriels JavaScript, Toutes les FAQ JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 26/04/2011, 12h27   #1
Invité de passage
 
Inscription : mars 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Par défaut ajouter ID avec un compteur

Bonjour à tous,

Je suis débutant en JS et jquery et je voudrais exécuter un script qui ajoute un id différent à plusieurs DIV de class identique:

Code :
1
2
3
4
5
6
7
8
9
 
<div id="content">
<div class="categories">
</div>
<div class="categories">
</div>
<div class="categories">
</div>
</div>
Code :
1
2
3
4
5
6
7
8
9
10
11
 
 
	function countPicturesByCat(){
	var nbCategories=$("div.categories").length;
	var cpt=0;
 
 
	while(cpt<nbCategories){
		$("div.categories").attr("id","categorie"+cpt);
		cpt=cpt+1;
		};
Mon code ne fonctionne pas car il sélectionne toujours toutes les DIV…
Je voudrais savoir si possible, comment faire pour tester si une DIV possède déjà un ID… Je suis preneur de n'importe quelle ébauche de code!

D'avances, merci beaucoup pour vos réponses!
Pas toujours facile de débuter

Bonne semaine à tous
SuperArbre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 12h48   #2
Membre actif
 
Inscription : juin 2004
Messages : 152
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 152
Points : 154
Points : 154
Bonjour,

Pour cela, tu peux utiliser les sélecteurs jQuery, div.categories:not([id]) qui te permet de récupérer permet les éléments div ayant la classe "categories" et n'ayant pas d'attribut id.

Ensuite, une bonne pratique par rapport à l'accès aux élément du dom, stocke les résultats dans une variable. Cela t'évite d'accéder plusieurs fois à l'arbre DOM.

Code :
1
2
3
4
5
 
function countPicturesByCat(){
	var categories = $("div.categories:not([id])");
	var nbCategories = categories.length;
	...
Ensuite, pour l'attribution des id, je ne sais pas si ta boucle avec un compteur est le moyen le plus "fiable"... si jamais des éléments de ton dom sont supprimés, tu pourrais réattribuer des id déjà présents...

Code :
1
2
3
4
5
6
7
8
9
 
var idGenerateur = 0;
function countPicturesByCat(){
	var categories = $("div.categories:not([id])");
	var nbCategories = categories.length;
        categories.each(function(index,valeur){
                $(this).attr("id",idGenerateur);
                idGenerateur++;
        });
Peut-être que stocker une variable "globale" que tu incrémentes à chaque fois est une solution plus appropriée. Certes, la manipulation de variable globale n'est pas trés propre, mais je ne suis pas sur qu'il y ait un moyen véritablement "propre"...

A+
BaBeuH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 12h53   #3
Responsable Développement Web

 
Avatar de Bovino
 
Homme Didier Mouronval
Développeur Web
Inscription : juin 2008
Messages : 13 806
Détails du profil
Informations personnelles :
Nom : Homme Didier Mouronval
Âge : 41
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2008
Messages : 13 806
Points : 35 803
Points : 35 803
Surtout, tu sembles ne pas avoir encore bien compris comment fonctionne jQuery.
va sélectionner tous les éléments dont la classe est "categories" et les stocker dans un objet jQuery.
Ensuite, lorsque tu fais
Code :
$("div.categories").attr("id","categorie"+cpt);
tu appliques à tous les éléments sélectionnés la méthode attr(), donc dans ton cas, à chaque itération, tu affectes le même id à tous tes éléments.

Ensuite, la boucle n'est effectivement pas la meilleure idée, il est préférable d'utiliser celle prévue par jQuery : each().

@BaBeuh : à quoi ça sert de passer par une variable incrémentée alors que c'est précisément le rôle du 1er paramètre de each() de servir de compteur
Code :
1
2
3
$('.categories').each(function(index){
    $(this).attr('id','categorie'+index);
});
__________________
Pas de question technique par MP !
Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
Vous possédez un blog et aimeriez diffuser vos billets sur le forum, contactez-moi !
Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
Mon livre sur jQuery
Bovino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 13h48   #4
Membre actif
 
Inscription : juin 2004
Messages : 152
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 152
Points : 154
Points : 154
@Bovino, J'envisageais le cas où il y a un ajout d'élément dans le DOM, et donc l'exécution "multiple" de la fonction générerait des id identiques en utilisant l'index de la boucle...

Si cette fonction n'est exécutée qu'une fois, lorsque le DOM est chargé, effectivement, cela convient parfaitement sans s'encombrer d'une variable globale.
BaBeuH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 14h11   #5
Invité de passage
 
Inscription : mars 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Par défaut merci

Bonjour,

Merci beaucoup pour vos conseils! Effectivement je n'ai encore pas tout compris et c'est peu dire! D'ici la semaine prochaine je vais faire des tutos JS et jquery…

C'est sympa d'avoir mis des bouts de codes que j'ai pu tester!

Bonne semaine.
SuperArbre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/04/2011, 17h18   #6
Invité de passage
 
Inscription : mars 2011
Messages : 22
Détails du profil
Informations forums :
Inscription : mars 2011
Messages : 22
Points : 4
Points : 4
Par défaut compteur d'image

Bonjour à tous,

Je suis me suis que le seul moyen de vraiment comprendre c'était d'essayer! Et bien j'aurais pas dû car je crois que je fais toujours faux

Cette fois un problème légèrement différent

1) pour chaque Div de class catégories-> calculer le nombre d'images
2) donner la catégorie qui contient le plus d'images
3) adapter la taille en fonction

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
// ajustement en fx du nbre d'images
 
	function countPicturesByCat(){ // créer une fonction qui calcul les éléments IMG
	var nbPicture=$("img").length;
	return nbPicture;
	};
 
 	var categories=$("div.categories");
 
    	categories.each(function(index,valeur){ // pour chaque catégories appeler la fonction countPicturesByCat
                var nombre=$(this).nbPicture;
        });
    var taille=200px/nombre; // diviser la taille par le nombre
    $("div.photo img").css("width","taille"); // appliquer variable taille en CSS
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
 
<div id="content">
<div class="categories">
<a href="images/galerie/ensembles/01.jpg"><img alt="concert" title="concert" src="images/galerie/ensembles/vignettes/01.jpg" /></a>
<a href="images/galerie/ensembles/01.jpg"><img alt="concert" title="concert" src="images/galerie/ensembles/vignettes/01.jpg" /></a>
</div>
<div class="categories">
<a href="images/galerie/ensembles/01.jpg"><img alt="concert" title="concert" src="images/galerie/ensembles/vignettes/01.jpg" /></a>
</div>
<div class="categories">
<a href="images/galerie/ensembles/01.jpg"><img alt="concert" title="concert" src="images/galerie/ensembles/vignettes/01.jpg" /></a><a href="images/galerie/ensembles/01.jpg"><img alt="concert" title="concert" src="images/galerie/ensembles/vignettes/01.jpg" /></a><a href="images/galerie/ensembles/01.jpg"><img alt="concert" title="concert" src="images/galerie/ensembles/vignettes/01.jpg" /></a>
</div>
</div>


En bref, il y a du juste mais aussi des fautes et je n'arrive pas à les trouver!

Si quelqu'un peu m'aider ce serait génial…! Merci à tous pour votre lecture.

Très bonne journée et meilleures salutations.
SuperArbre est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h03.


 
 
 
 
Partenaires

Hébergement Web