IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

jQuery Discussion :

Afficher cacher div


Sujet :

jQuery

  1. #1
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 42
    Points
    42
    Par défaut Afficher cacher div
    Bonjour, voici un code qui permet d'afficher et de cacher une div en fonction d'un id

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $('#reserver1').click(function(){
        $('#cacherreserver1').fadeToggle("fast","linear");
    });
     
    $('#reserver2').click(function(){
        $('#cacherreserver2').fadeToggle("fast","linear");
    });
    le problème c'est que je suis obliger de créer une fonction et 2 id à chaque fois. Je cherche à réaliser les même fonction en une seule, c'est à dire que dans mon html je rajouterais un chiffre et mon script pourra faire apparaître cacherreserver10 si je clique sur reserver10 et ne fera pas apparaître un autre id cacherreserver[i]. J'ai penser à un tableau... je ne suis pas un expert en JQuery :/

    Merci pour votre aide

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Avec une class et un attribut data-id.

  3. #3
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 42
    Points
    42
    Par défaut
    Bonjour jreaux62,

    merci de ta réponse, je ne trouve pas beaucoup d'info sur les data-id mais j'en est déjà utiliser sans vraiment aller plus loin.
    j'ai tester ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $('.reserveraction').click(function(){
    var num = $(this).attr("data-id");
        $('#cacherreserver'+num).fadeToggle("fast","linear");
    });
    ça fonctionne mais je pense qu'il peut être amélioré :p

    ce qui me permet dans mon html de faire <a data-id="2" class="reserveraction"> qui fait apparaître <div id="cacherreserver2">
    je n'est pas trouver comment faire apparaître" cacherreserver" en fonction d'un "data-id"
    exemple :
    <a data-id="2" class="reserveraction"> pour faire apparaître <div data-id="2" id="cacherreserver">
    <a data-id="3" class="reserveraction"> pour faire apparaître <div data-id="3" id="cacherreserver">
    <a data-id="4" class="reserveraction"> pour faire apparaître <div data-id="4" id="cacherreserver">

    je vais chercher mais si quelqu'un peut m'orienter ça serait sympa ^.^

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 386
    Points : 10 413
    Points
    10 413
    Par défaut
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    <!DOCTYPE html>
    <html lang="fr">
    <head>
    <meta charset="utf-8">
    <title>Afficher/cacher des blocs</title>
    <script src="//code.jquery.com/jquery-1.11.2.js"></script>
    <script>
    $(function(){                 
    	$(".reserveraction").on('click',function()
    	{
    		var that = $(this);
    		$(".cacherreserver").each(function()
    		{
    		   if($(this).data("id") == that.data("id")) {$(this).fadeToggle( "fast", "linear" )}
    		})
    	});
    });
    </script>
    <style type="text/css">
    .reserveraction
    {
    	text-decoration:underline;
    	cursor:pointer;
    	display:inline-block;/* sert juste pour définir une marge entre les éléments en ligne*/
    	margin-right:2em;
    }
    .cacherreserver
    {
    	display:none;
    	border:1px solid black;
    }
    </style>
    </head>
    <body>
    <span data-id="2" class="reserveraction"> pour faire apparaître ou disparaître 2</span>
    <span data-id="3" class="reserveraction"> pour faire apparaître ou disparaître 3</span>
    <span data-id="4" class="reserveraction"> pour faire apparaître ou disparaître 4</span>
     
    <div data-id="2" class="cacherreserver">2</div>
    <div data-id="3" class="cacherreserver">3</div>
    <div data-id="4" class="cacherreserver">4</div>
    </body>
    </html>
    EDIT : Et si tu ne modifies pas le DOM dynamiquement ce sera un peu plus optimisé de ne chercher les éléments "cacherreserver" qu'une fois.
    Soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <script>
    $(function(){
    	var cacherreserver = $(".cacherreserver");
    	$(".reserveraction").on('click',function()
    	{
    		var that = $(this);
    		cacherreserver.each(function()
    		{
    		   if($(this).data("id") == that.data("id")) {$(this).fadeToggle( "fast", "linear" )}
    		})
    	});
    });
    </script>

  5. #5
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 42
    Points
    42
    Par défaut
    ça fonctionne parfaitement merci beaucoup

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    la solution dépend du contexte. Ici, de la position relative des éléments.

    1/ pour moi, cette solution fonctionne très bien, quand les div sont éloignés (position relative difficile à définir, ou variable) :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a class="reserveraction" data-id="2"> ........ <div id="cacherreserver_2">
    <a class="reserveraction" data-id="3"> ......... <div id="cacherreserver_3">
    <a class="reserveraction" data-id="4"> ......... <div id="cacherreserver_4">
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.reserveraction').on( 'click', function(){
        $('#cacherreserver_'+$(this).attr('data-id')).fadeToggle('fast','linear');
    });

    2/ quand les div sont dans une structure définie... on peut utiliser les fonctions jQuery parent(), siblings(), next(),..... pour accéder à la cible :
    Ex.
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <article>
       <a class="reserveraction">...</a>
       ....
       <div class="cacherreserver">...</div>
    </article>
    <article>
       <a class="reserveraction">...</a>
       ....
       <div class="cacherreserver">...</div>
    </article>
    <article>
       <a class="reserveraction">...</a>
       ....
       <div class="cacherreserver">...</div>
    </article>
    Dans cet exemple :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $('.reserveraction').on( 'click', function(){
        $(this).siblings('cacherreserver').fadeToggle('fast','linear'); // on cible l'élement "frère" (contenu dans <article>)
    });

  7. #7
    Membre du Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    Points : 42
    Points
    42
    Par défaut
    Effectivement ta proposition est inintéressante, je te remercie pour ce complément d'information.

  8. #8
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 386
    Points : 10 413
    Points
    10 413
    Par défaut
    la solution dépend du contexte. Ici, de la position relative des éléments.
    Je me permets de préciser un peu pour les débutants qui liraient ce sujet.

    Si on choisi une solution qui dépend du contexte, en particulier de la position relative des éléments, il faudra que ce contexte soit toujours identique.
    Cela implique que si on modifie le html (par exemple simplement la position des éléments), on devra aussi modifier le javascript correspondant. Bref on est loin d'un code "générique". Cependant, en contre partie, le code sera plus efficace, il prendra moins de ressources pour s'exécuter puisque la recherche est moins longue à faire.

    On peut dire que la solution la plus efficace en terme de performance dépend de la position relative des éléments, mais d'une manière plus générale il faut d'abord penser au contexte de l'utilisation et de l'évolution du code.

    Aussi ma position est plutôt de d'abord faire du code le plus générique possible, et dans certains cas particuliers bien réfléchis - parce que cela va imposer des contraintes fortes en termes d'évolution du code - préférer la performance en ciblant les éléments au plus près, en relatif

  9. #9
    Invité
    Invité(e)
    Par défaut
    A mon avis, la solution la plus "générique" et simple et performante est la 1/, fournie ici, puisqu'on va cibler un id (forcément unique).

  10. #10
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 386
    Points : 10 413
    Points
    10 413
    Par défaut
    Salut jreaux62

    Oui je répondais principalement par rapport à ta seconde solution.

    Concernant la première et pour les performances c'est certain, par contre générique et simple c'est discutable, je m'en explique ici. Certes le contexte est différent mais d'une "manière générale" il faut éviter la prolifération systématique des id si c'est uniquement pour cibler des éléments en javascript. Simplement pour dire aux débutants de ne pas s'enfermer dans cette méthode qui est souvent utilisée par facilité (un peu comme un réflexe) mais qui a des limites/inconvénients.

    Pour le côté générique ensuite, je préfère la solution qui propose le plus de symétrie. Dans mon exemple le code html pour générer le lien et sa cible sont construits d'une manière strictement identique. C'est juste la classe qui permet d'accorder les éléments.

    Dans ton cas il faut construire un id sur mesure. Tu vas me dire qu'on pourra toujours se débrouiller pour le faire (puisqu'il nécessite les mêmes informations) mais d'une manière générale ce sera moins maniable/lisible/facile et donc moins générique. Par exemple, si on a besoin de formater les éléments cibles en css d'une manière générique on aura besoin d'utiliser une classe, donc on va finir quand même par avoir besoin d'un id + une classe. Là tu perds un premier avantage de ta solution en alourdissant un peu le html. Ensuite si on modifie plus tard le DOM en ajoutant des éléments de manière dynamique il va falloir faire attention à l'éventuel problème des duplicates ID, et puis faudra jongler si on veux faire du clonage. Bref il est difficile de considérer que cette solution est la plus générique si on considère que le générique permet de faire évoluer le code avec un minimum de contraintes.

    (Au passage, ton dernier lien ne fonctionne pas)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Afficher/cacher div
    Par Pandapi dans le forum jQuery
    Réponses: 5
    Dernier message: 29/07/2015, 11h48
  2. Afficher/cacher div en glissant
    Par Invité dans le forum jQuery
    Réponses: 5
    Dernier message: 13/06/2011, 23h59
  3. Afficher / Cacher Div + Effet sur Texte
    Par HiRoN dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 24/03/2009, 21h26
  4. afficher cacher div
    Par calitom dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 06/03/2007, 11h35
  5. afficher / cacher div
    Par Cruelo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/11/2004, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo