2013-03-05 2 views
5

У меня есть этот HTML:Как добавить класс в конкретный ли?

<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> 

О документе готового Я хочу, чтобы добавить новый класс 4 Li элемента.

Это то, что я пробовал:

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

Если я ставлю тревогу как:

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

это дает мне 1 неделю который является правильным, но когда я addclass добавлен класс для всех li после 4-го ли.

Я хочу этого без добавления ID каждому элементу li. Я могу жестко кодировать класс в элементе li напрямую, но я хочу сделать это динамически с помощью jQuery.

ответ

13

Чтобы сделать это в одном селекторе, используйте nth-child или eq:

nth-child является значительно быстрее см мой JSPerf здесь: 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'); 

Основное отличие состоит в том, что nth-child даст вам 4-й элемент каждый элемент с этим классом (независимо от того, является ли он потомком текущего пункта), в то время как eq будет дать вам детей по текущему предмету.

+0

это выбрать третий элемент, не четвёртое, как я помню – karaxuna

+0

@karaxuna Хорошее место, отредактированный :) – mattytommo

+0

@karaxuna Только для 'nth-child'. 'eq' основан на 0. – mattytommo

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

slice не возвращает объект jQuery, поэтому вы не можете использовать метод addClass. Правильный способ сделать то, что вы собираетесь это:

индексом:

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

по ссылающегося значение:

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

для этой конкретной проблемы, ссылаясь на значение, работает, но скажите, хотел ли он добавить класс ко второму li, если он должен был выполнить '$ (". How-long li [value = 1] ")' это также добавит класс для первого li, идите с опцией индекса. –

+0

'.slice()' возвращает объект jQuery, если он используется для объекта jQuery. – JJJ

+1

не согласны с 'срезом', не возвращающим объект jQuery ... http: //api.jquery.com/slice/ – charlietfl

-1

ли это так

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

Это добавит класс test до 4-го числа li

Надежда это HEPS

+0

Почему я получил (-) голосование? :( – Roger

+1

плохой пример, если позже есть существующий класс на ли, он будет заменен вашим методом. Однако -1 не был мне :) –

1

Если вы хотите использовать метод среза необходимо указать конечный атрибут, который вы пропускаете

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

Он выбирает 4-го, потому что начальный индекс массива от 0.

Вы всегда можете использовать $ ('. While li: nth-child (4)');

Более подробная информация здесь: http://api.jquery.com/nth-child-selector/

Смежные вопросы