2013-03-05 10 views
5

mam to HTML:Jak dodać zajęcia do poszczególnych li?

<ul class="how-long"> 
    <li value="1">Any</li> 
    <li value="1">1 day</li> 
    <li value="2">Week end</li> 
    <li value="7">1 Week</li> 
    <li value="14">2 Week</li> 
    <li value="21">3 Week</li> 
</ul> 

na dokument gotowy Chcę dodać nową klasę do 4-ej li.

To co próbowałem:

$(".how-long li").slice(3).addClass('change-color'); 

Jeśli mogę umieścić alert jak:

alert($(".how-long li").slice(3).html()); 

daje mi 1 tydzień, który jest w porządku, ale kiedy addClass klasa jest dodawany do wszystkich li po 4 li.

Chcę tego bez dodawania ID do każdego elementu li. Mogę twardo kodu klasy w li element bezpośrednio, ale chcę zrobić to dynamicznie za pomocą jQuery.

Odpowiedz

13

Aby zrobić to w jednym selektorem, użyj nth-child lub eq:

nth-child jest znacznie szybciej, zobacz moje jsPerf tutaj: http://jsperf.com/nth-child-vs-eq

jsperf

nth-child:

$(".how-long li:nth-child(4)").addClass('change-color'); 

eq:

$(".how-long li:eq(3)").addClass('change-color'); 

Podstawową różnicą jest to, że nth-child daje 4. elementem każdy element z tej klasy (niezależnie od tego, czy jest to dziecko z danej pozycji), natomiast eq będzie daj dzieciom bieżący przedmiot.

+0

ten wyłoni trzeci element, a nie czwarty jak pamiętam – karaxuna

+0

@karaxuna Good spot, edytowany :) – mattytommo

+0

@karaxuna Tylko dla 'n-dziecko' chociaż. 'eq' ma wartość 0. – mattytommo

9
$(".how-long li").eq(3).addClass('change-color'); 
2

plaster nie zwraca obiektu jQuery, dlatego nie można użyć metody addClass. Właściwy sposób, aby robić to, co masz zamiar to:

przez index:

$(".how-long li").eq(3).addClass('change-color'); 

poprzez odniesienie wartości:

$(".how-long li[value=7]").addClass('change-color'); 
+0

dla tego konkretnego problemu przez odwołanie się do wartości działa, ale powiedz, czy chciał dodać klasę do drugiego li, jeśli miałby zrobić '$ (". How-long li [value = 1] ")' to by również dodać klasę do pierwszego li więc wybierz opcję indeksu. –

+0

'.slice()' zwraca obiekt jQuery, jeśli jest używany w obiekcie jQuery. – JJJ

+1

Nie zgadzam się co do 'plasterka' nie zwracającego obiektu jQuery ... http: //api.jquery.com/slice/ – charlietfl

-1

zrobić w ten sposób

$(".how-long li:nth-child(4)").attr({'class':'test'}); 

To doda klasa test do 4 li

Nadzieja to heps

+0

Dlaczego dostałem (-) ive głos? :( – Roger

+1

zły przykład, jeśli później istnieje istniejąca klasa na li zostanie ona zastąpiona twoją metodą, jednak -1 nie było mną :) –

1

Jeśli chcesz użyć metody slice trzeba określić atrybut końcową, która brakuje

$(".how-long li").slice(3,4).addClass('change-color'); 
Powiązane problemy