Modifier class span

Résolu
Bonjour,
Je cherche à modifier la class d'un de mes span.
J'ai une liste contenant plusieurs span et je cherche à modifier la class d'un élément de ma liste quand je clique dessus.

<ul class="messagesList" id="list">
 <li id="454"><span class="from"><span id="454" class="glyphicons star"></span>
 <li id="453"><span class="from"><span id="453" class="glyphicons star"></span>
 <li id="452"><span class="from"><span id="452" class="glyphicons star"></span>
 <li id="451"><span class="from"><span id="451" class="glyphicons star"></span>
</ul>


J'aimerais modifier glyphicons star par glyphicons dislikes, j'ai essayé ça mais ça ne marche pas correctement

$('#list').on('click', 'li', function() {
                var id = $(this).attr('id');
                $('#' + id).toggleClass('glyphicons dislikes');
}); 


4 réponses

  1. Modérateur
    Bonjour,

    Et que donne ceci :

    $('#list').on('click', 'li', function() {
          var id = $(this).attr('id');
          $("#"+id).toggleClass('glyphicons star');
          $("#"+id).toggleClass('glyphicons dislikes');  
    }); 
    

    1. ça ne change rien, par contre $("#"+id).toggleClass('glyphicons dislikes'); seul m'affiche bien l'icône que je veux cependant l'ancien n'est pas remplacé
    2. Modérateur
      @samyAu pire , fais un REMOVE ADD

      Par exemple :
      var classToRemove;
      var classToAdd ;
      if( $('#'+id).hasClass('glyphicons star')){
        classToRemove = 'glyphicons star';
        classToAdd    = 'glyphicons dislikes';
      }else{
        classToRemove = 'glyphicons dislikes';
        classToAdd    = 'glyphicons star';
      }
       $("#"+id).removeClass(classToRemove);
       $("#"+id).toggleClass(classToAdd); 
      
  2. Salut,

    Plusieurs remarques :
    - le code html n'est pas correct, les balises span .from et li ne sont pas fermées
    - dans le code javascript, il faut cibler le span qui possède la classe .glyphicons, pour l'instant tu cible la balise li
    - sauf erreur de ma part, les classes glyphicons doivent être écrites sous la forme "glyphicons glyphicons-star"

    Soit :
    <ul class="messagesList" id="list">
     <li id="454"><span class="from"><span id="454" class="glyphicons glyphicons-star"></span></span></li>
     <li id="453"><span class="from"><span id="453" class="glyphicons glyphicons-star"></span></span></li>
     <li id="452"><span class="from"><span id="452" class="glyphicons glyphicons-star"></span></span></li>
     <li id="451"><span class="from"><span id="451" class="glyphicons glyphicons-star"></span></span></li>
    </ul>
    


    $('#list').on('click', 'li', function() {
        var span = $('.glyphicons', this); // on cible la balise avec la classe .glyphicons dans la balise li cliquée (this)
        span.toggleClass('glyphicons-star');
        span.toggleClass('glyphicons-dislikes');
    });
    


    Bonne journée
    1. Bonjour,

      Vous n'agissez pas sur le bon élément.

      - Premièrement fermez correctement vos balises <span> et <li>.
      - Ensuite il faut donc que la fonction soit déclarer dans une méthode onload (document ready avec jQuery).

      Voici le code :
      $( document ).ready(function() {
                // On cible le span 
      	  $('#list li .glyphicons').click(function() {
                      // Retire la class "star"
      		$(this).toggleClass( "star" );
                      // Ajoute la classe "dislikes"
      		$(this).toggleClass( "dislikes" );
      	 }); 
      });