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

Vue hybride

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

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    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 averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    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 confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    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 420
    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 averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : Septembre 2015
    Messages : 35
    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 averti
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Septembre 2015
    Messages
    35
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Auditeur informatique

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

  8. #8
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 420
    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 420
    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

+ 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