2012-10-02 12 views
17

Ho un ul-list che contiene li-elements. Quando l'utente fa clic su uno di questi elementi li, deve essere aggiunta una classe a quell'elemento.jQuery: Rimuovi classe se si fa clic su un altro elemento

Questo è facile da configurare, tuttavia, quando si fa clic sull'altro elemento li, voglio che la classe "attiva" venga rimossa dal li non attivo.

ho fatto una jsfiddle del problema: http://jsfiddle.net/tGW3D/

Ci dovrebbe essere una li-elemento che è di colore rosso in qualsiasi momento. Se fai clic sul secondo e poi sul primo, solo il primo dovrebbe essere rosso.

risposta

52

Questo rimuoverà la classe attiva da ogni li che è attiva e che verrà aggiunta all'elemento su cui è stato fatto clic.

$('body').on('click', 'li', function() { 
     $('li.active').removeClass('active'); 
     $(this).addClass('active'); 
}); 
+0

Grazie, funziona bene! –

+0

@AlbinN di si prega di contrassegnare la risposta come corretta – Burimi

+0

Yup, ma ha dovuto aspettare –

15

È possibile utilizzare siblings e removeClass metodi.

$('li').click(function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 

http://jsfiddle.net/Lb65e/

5

semplicemente rimuovere tutte le istanze di .active prima, e poi aggiungerlo:

$('ul li').on('click', function() { 
    $('ul li.active').removeClass('active'); 
    $(this).addClass('active');  
}); 
2

qualcosa di simile?

http://jsfiddle.net/c7ZE4/

È possibile utilizzare la funzione di fratelli. addClass restituisce lo stesso oggetto jquery $ (this) in modo da poter concatenare il metodo siblings che restituisce tutti gli altri elementi tranne $ (questo).

$('li').click(function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 
+0

Ora vedo che non ero da solo in questo: D Comunque questo può essere un solo liner. –

1
$('li').click(function() { 
     $(this).addClass('active'); // add the class to the element that's clicked. 
     $(this).siblings().removeClass('active'); // remove the class from siblings. 
}); 

Se sai jQuery è possibile concatenare è come qui di seguito.

$('li').click(function() { 
     $(this).addClass('active').siblings().removeClass('active'); 
}); 

Sopra il codice farà il trucco per voi. Try this demo

0

Si cambia classe CSS da questo codice:

$('li').click(function() { 
    $(this).addClass('active').siblings().removeClass('active'); 
}); 

Link jsfiddle

+0

Grazie, ma la domanda ha avuto una risposta per 4 anni. :) –

0
<script> 
    $(function() { 
     $('li').click(function() { 
      $("li.active").removeClass("active"); 
       $(this).addClass('active'); 
      }); 
     }); 
</script> 
+0

Puoi migliorare la risposta fornendo una spiegazione di ciò che fai –

Problemi correlati