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 :

Remplacer Class dans HTML


Sujet :

jQuery

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Par défaut Remplacer Class dans HTML
    Bonjour à tous ,

    Pour un site web je voudrais afficher une card cliquée , l'agrandir et cachée les autres.
    Je me suis lancé dans un petit scritp JS et je rencontre deux petits soucis.

    1- Mon script fonctionne sur la première card , mais pas sur les autres. Cela agrandi toujours la 1ere quand je clique sur la 2éme , 3éme ou 4éme, comment rester dans la card cliqué ?
    2- la fonction ne se recharge pas automatiquement j'ai donc ajouté a la fin , est ce qu'il y a une autre possibilité ? le reload n'est pas très agréable lors de la navigation .

    ci- dessous le
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
        <div class="row mt-2 justify-content-center">
          <div class="card-deck mt-2 justify-content-center text-center">
            <div id="size" class=".col-sm-3 .col-xs-6 mb-2 mr-2 ml-2 ">
              <div id="card" class="card column creches" style="width:18rem;">
                <img src="img/references/creche/Eiders_paris19/1.jpg" class="card-img-top" alt="Créche - Eiders">
                <div class="card-body ">
                  <h5 class="card-title">Eiders</h5><p><i>Créche - Paris 19</i></p> 
                  <a href="#" data-toggle="collapse" data-target="#c1"><i id="btnplus" class="fas fa-plus-circle fa-lg"></i></a>
                  <div class="col-12 collapse fade" id="c1">
                    <p>Nullam sapien massa, aliquam in cursus ut, ullamcorper in tortor. Aliquam codeply mauris arcu, tristique a lobortis vitae, condimentum feugiat justo.
                    </p>
                  </div>
                </div>
              </div>
            </div>
            <div id="size" class=".col-sm-3 .col-xs-6 mb-2 mr-2 ml-2">
              <div id="card" class="card column creches" style="width: 18rem;">
                <img src="img/references/creche/Le _moulin_en_herbe/1.jpg" class="card-img-top" alt="Créche - Le moulin en herbe">
                <div class="card-body">
                  <h5 class="card-title">Le moulin en herbe</h5><p><i>Créche - Paris 12</i></p> 
                  <a href="#" data-toggle="collapse" data-target="#c2"><i id="btnplus" class="fas fa-plus-circle fa-lg"></i></a>
                  <div class="col-12 collapse fade" id="c2">
                    <p>Nullam sapien massa, aliquam in cursus ut, ullamcorper in tortor. Aliquam codeply mauris arcu, tristique a lobortis vitae, condimentum feugiat justo.
                    </p>
                  </div>
                </div>
              </div>
            </div>

    le JS :

    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
    <script>
       $("#btnplus").on( "click", function() {
        if($("#btnplus").hasClass("fas fa-plus-circle fa-lg")){
          console.log("Hello passed in if");
          $('#size').attr('id', 'selected');// add id selected to div size
          $('#card').attr('id', 'cardselected');// add id selected to div card
          $('#selected').show(); // show div card clicked
          $('div#size').hide(); //hide all other div cards
          $('#cardselected').attr('style','width: 40rem'); // expand the clicked card
          $('#btnplus').removeClass('fa-plus-circle').addClass('fa-minus-circle'); //change button from + to - 
        }
        else {
          console.log("Hello passed in else");
          $('#cardselected').attr('style','width: 18rem');
          $('#cardselected').attr('id', 'card');
          $('#selected').attr('id', 'size');
          $('div#size').show();
          $('#btnplus').removeClass('fa-minus-circle').addClass('fa-plus-circle');
          location.reload();
        }
      });
    </script>
    Merci d'avance pour votre aide

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,

    Attention, tu as plusieurs éléments avec le même id
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="size" class=".col-sm-3 .col-xs-6 mb-2 mr-2 ml-2">
    et
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <i id="btnplus" class="fas fa-plus-circle fa-lg"></i>
    et
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="card" class="card column creches" style="width:18rem;">
    alors qu'un id doit être unique dans une page html.

    Il serait judicieux de ne pas utiliser les id (les supprimer ou les remplacer par une class) et attacher l'évènement click aux <i> en utilisant seulement leurs classe, donc commence par remplacer id="size" par class="size" puis utilise ce code :

    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
     
    $(".card").on("click",".fas",function(){
       if($(this).hasClass("fa-plus-circle")){
         $(this)
         .removeClass('fa-plus-circle')
         .addClass('fa-minus-circle')
         .closest(".card").css("width", "40rem")
         .show()//affiche le parent supérieur de ".fas" ayant la classe "card"
         .parent('.size').show();
      }
      else{
         $(this)
         .removeClass('fa-minus-circle')
         .addClass('fa-plus-circle')
         .closest(".card").css("width","18rem")
         .hide()
         .parent(".size").hide();
      }
    });
    Une autre remarque:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
     <div id="size" class=".col-sm-3 .col-xs-6 mb-2 mr-2 ml-2"></div>
    , tu ne vois pas que les points précèdent les 2 premières classes ?

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Par défaut
    Merci Toufik83 pour le code et pour le petite rafraîchissement de mémoire concernant les ID !
    c'est beaucoup plus propre

    Pour le hide des autres cards dans le if , il faut que je fasse un hide en allant chercher card-deck ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    .closest(".card-deck").not(this).hide(".card");
    mais cela cache toutes les cards meme celle qui a été cliqué , est ce qu'il y a une autre methode ?

    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
    $(".card").on("click",".fas",function(){
       if($(this).hasClass("fa-plus-circle")){
         $(this)
         .removeClass('fa-plus-circle')
         .addClass('fa-minus-circle')
         .closest(".card").css("width", "40rem")
         .show();//affiche le parent supérieur de ".fas" ayant la classe "card"
         .parent(".size").show();
         .closest(".card-deck").hide(".card")but;
     
      }
      else{
         $(this)
         .removeClass('fa-minus-circle')
         .addClass('fa-plus-circle')
         .closest(".card").css("width","18rem")
         .closest(".card-deck").show(".card");
      }
    });

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 511
    Par défaut
    Bonjour,

    Il y'a des erreurs dans le code, des points virgules en trop
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    .show(); //ici
         .parent(".size").show(); //et ici
         .closest(".card-deck").hide(".card")but;
    Et je pense aussi que tu peux utiliser les méthodes show() et hide() seulement avec les .size et simplifier le code comme suite :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <div class="row mt-2 justify-content-center">
      <div class="card-deck mt-2 justify-content-center text-center">
        <div class="size" class="col-sm-3 col-xs-6 mb-2 mr-2 ml-2 ">
          <div class="card" class="card column creches" style="width:18rem;">
            <img src="img/references/creche/Eiders_paris19/1.jpg" class="card-img-top" alt="Créche - Eiders">
            <div class="card-body ">
              <h5 class="card-title">Eiders</h5>
              <p><i>Créche - Paris 19</i></p>
              <a href="#" data-toggle="collapse" data-target="#c1"><i  class="fas fa-plus-circle fa-lg"></i></a>
              <div class="col-12 collapse fade" id="c1">
                <p>Nullam sapien massa, aliquam in cursus ut, ullamcorper in tortor. Aliquam codeply mauris arcu, tristique a lobortis vitae, condimentum feugiat justo.
                </p>
              </div>
            </div>
          </div>
        </div>
        <div class="size" class="col-sm-3 col-xs-6 mb-2 mr-2 ml-2">
          <div class="card" class="card column creches" style="width: 18rem;">
            <img src="img/references/creche/Le _moulin_en_herbe/1.jpg" class="card-img-top" alt="Créche - Le moulin en herbe">
            <div class="card-body">
              <h5 class="card-title">Le moulin en herbe</h5>
              <p><i>Créche - Paris 12</i></p>
              <a href="#" data-toggle="collapse" data-target="#c2"><i  class="fas fa-plus-circle fa-lg"></i></a>
              <div class="col-12 collapse fade" id="c2">
                <p>Nullam sapien massa, aliquam in cursus ut, ullamcorper in tortor. Aliquam codeply mauris arcu, tristique a lobortis vitae, condimentum feugiat justo.
                </p>
              </div>
            </div>
          </div>
        </div>

    et jQuery :
    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
     
     $(".card").on("click", ".fas", function() {
      //cacher tous les .size sauf le parent de l'élément sur lequel on clique.
       $(".size").not($(this).closest('.size')).hide(); 
       if ($(this).hasClass("fa-plus-circle")) {
         $(this)
           .removeClass('fa-plus-circle')
           .addClass('fa-minus-circle')
           .closest(".card").css("width", "40rem");
       } else {
         $(".size").show();//affiche tous les .size
         $(this)
           .removeClass('fa-minus-circle')
           .addClass('fa-plus-circle')
           .closest(".card").css("width", "18rem");
     
       }
     });

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 114
    Par défaut
    Yes ca fonctionne ! Merci !

    j'ai ajouté le show dans le else

    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
     
    <script>
    $(".card").on("click",".fas",function(){
      $(".size").not($(this).closest('.size')).hide();//cacher tous les .size sauf le parent de l'élément sur lequel on clique.
      if($(this).hasClass("fa-plus-circle")){
        $(this)
        .removeClass('fa-plus-circle')
        .addClass('fa-minus-circle')
        .closest(".card").css("width", "40rem");
     }
     else{
        $(".size").show();
        $(this)
        .removeClass('fa-minus-circle')
        .addClass('fa-plus-circle')
        .closest(".card").css("width","18rem")
     }
    });
     
    </script>

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

Discussions similaires

  1. Javascript Chercher et remplacer dans HTML
    Par yoan7518 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/01/2018, 13h13
  2. Classe dans un tableau HTML
    Par elliotgb dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2016, 14h10
  3. attribut class dans html:link
    Par gloglo dans le forum Struts 1
    Réponses: 2
    Dernier message: 20/12/2006, 11h57
  4. [C#] [.NET] Lecture d'une classe dans un fichier
    Par niPrM dans le forum Windows Forms
    Réponses: 4
    Dernier message: 18/05/2004, 08h57
  5. Réponses: 5
    Dernier message: 12/05/2004, 16h37

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