Егор К.
935 повідомлень
#12 років тому
Может, кто сталкивался с подобным?
Если написать:
$('li:odd').addClass('odd');

то во всех ul в документе будут найдены и помечены все нечетные li. Но так как во всех, то для каждого ul уже будет путаница, т.к. считаются все li, не зависимо от того, где они находятся.
А хотелось бы чтобы считались только все li в каждом ul
Пробовал исправить ситуацию так:
$('ul').each(function(i, el) {
$(el).children('li:odd').addClass('odd');
});

Не помогло, все равно считаются все li. Тогда уже отказался от : odd и сделал постаринке:
$('ul').each(function(i, el) {
$(el).children('li').each(function(i, el) {
if ((i+1)%2!=0){
$(el).addClass('odd');
};
});
});

Это, конечно работает, но как такое же сделать, но более короче, например, с использованием селектора : odd ?
Сергей Н.
183 повідомлення
#12 років тому
Может быть, так
$("ul > li:odd")
Егор К.
935 повідомлень
#12 років тому
Этот вариант тоже пробовал, не работает. В html проблема выглядит так, на примере с двумя ul в документе:
(Все варианты скрипта до последнего без : odd)

<ul>
<li class="odd">
<li>
<li class="odd">
<li>
<li class="odd">
<li>
<li class="odd">
<li>
<li class="odd">
</ul>
<ul>
<li>
<li class="odd">
<li>
<li class="odd">
<li>
<li class="odd">
<li>
<li class="odd">
<li>
</ul>

</li> я тут для наглядности удалил. Получается, что во втором ul первый li - уже почему-то четный.
Сергей Н.
183 повідомлення
#12 років тому
Тогда так

$("ul").each(function(i,e){
$(e).find('> li:odd').addClass("odd")
})
Егор К.
935 повідомлень
#12 років тому
Не работает тоже. Получается так что : odd ищется jQuery во всем документе игнорируя даже собственные функции .each. Может я не прав, поэтому и создал тему.
Сергей Н.
183 повідомлення
#12 років тому
И последняя попытка, попробовать контекст
$("ul").each(function(){
$('> li:odd',this).addClass("odd")
})


Есть еще предположение, что у вас с разметкой что-то не так
Егор К.
935 повідомлень
#12 років тому
Этот вариант тоже не получился. Разметка не 100% валидная, но грубых ошибок нет. Так валидатор ворчит на разные мелочи.
И если бы что-то с ней не так было, то скрипт без : odd не работал бы.
Проблемы то нет, решение то мной найдено. Так для саморазвития создал тему, может, кто сталкивался и знает короче вариант.
Максим К.
124 повідомлення
#12 років тому
Ap6y3 все правильно написал. Выложите тестовый пример куда-то, где видно проблему.
Егор К.
935 повідомлень
#12 років тому
Прошу прощения. Ошибки не было просто я чуть протупил.
Вот эти варианты:

$('ul').each(function(i, el) {
$(el).children('li:odd').addClass('odd');
});

$("ul").each(function(i,e){
$(e).find('> li:odd').addClass("odd")
})

$("ul").each(function(){
$('> li:odd',this).addClass("odd")
})



(один мой и два Арбу3) все работают! Тему закрываю. Кстати, спасибо Арбу3у за последний вариант, я про контекст раньше не знал.
Сергей Н.
183 повідомлення
#12 років тому
Контекстом советую пользоваться только в крайних случаях, потому что если он не будет найден, то поиск побежит по всему документу.
$.find() надежнее и быстрее