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. 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" );
    	 }); 
    });
    
    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