2012-10-02 13 views
17

Mam listę ul zawierającą elementy li. Gdy użytkownik kliknie jeden z tych elementów li, do tego elementu należy dodać klasę.jQuery: Usuń klasę, jeśli kliknięto inny element.

Jest to łatwe do ustawienia, jednak po kliknięciu drugiego elementu li chcę, aby klasa "aktywna" została usunięta z nieaktywnego li.

Zrobiłem jsfiddle problemu: http://jsfiddle.net/tGW3D/

Nie powinno być jednym li-czerwony element, który jest w danym momencie. Jeśli klikniesz drugi, a następnie pierwszy, tylko pierwszy powinien być czerwony.

Odpowiedz

52

Spowoduje to usunięcie aktywnej klasy z każdego li, które ma aktywny, a następnie doda do elementu, który został kliknięty.

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

Dzięki, działa bez zarzutu! –

+0

@AlbinN niż proszę oznaczyć odpowiedź jako poprawną – Burimi

+0

Tak, ale musiałem czekać –

5

Wystarczy usunąć wszystkie wystąpienia .active pierwszy, a następnie dodać go:

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

coś takiego?

http://jsfiddle.net/c7ZE4/

Można użyć funkcji rodzeństwa. addClass zwraca ten sam obiekt jquery $ (this), aby można było łańcuchować metodę siblings, która zwraca wszystkie pozostałe elementy z wyjątkiem $ (this).

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

Widzę teraz, że nie byłam sama w tym: D W każdym razie może to być jedna linijka. –

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

Jeśli znasz jQuery można przykuć go jak poniżej.

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

Powyższy kod zrobi za Ciebie. Try this demo

0

zmienić klasę css przez ten kod:

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

Link do jsfiddle

+0

Dzięki, ale na to pytanie udzielono odpowiedzi przez 4 lata. :) –

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

Możesz poprawić odpowiedź, wyjaśniając, co robisz –

Powiązane problemy