2012-04-19 2 views
0

я следующая разметка:JQuery целевой каждый п-й родственный элемента

<div class="region"> 
<div class="award"> 
<div class="award"> 
<div class="region"> 
<div class="award"> 
<div class="award"> 
<div class="award"> 
<div class="award"> 
<div class="award"> 
<div class="award"> 

Как нацелит 3-й элемент после .region, так что я получаю что-то вроде этого?

<div class="region"> 
<div class="award"> 
<div class="award"> 
<div class="region"> 
<div class="award"> 
<div class="award"> 
<div class="award third"> 
<div class="award"> 
<div class="award"> 
<div class="award third"> 

Обратите внимание, что это не первый элемент .award после первого .региона.

Заранее благодарен!

+0

возможно дубликат http://stackoverflow.com/questions/1260277/addclass-every-nth – Armatus

+0

@Armatus : Я так не думаю, а не с разными начальными точками. –

+0

Эти divs должны быть * братьями и сестрами *, правильно? Вы не закрыли их, а это значит, что у вас есть восемь слоев детей, но я уверен, что это не то, что вы имели в виду ... –

ответ

2

nextUntil в сочетании с eq должны это сделать:

$("div.region").each(function() { 
    $(this).nextUntil(":not(.award)").eq(2).addClass("third"); 
}); 

Неа, немного сложнее, для обработки 6-й элемент:

$("div.region").each(function() { 
    $(this).nextUntil(":not(.award)").filter(function(index) { 
     return index % 3 == 2; 
    }).addClass("third"); 
}); 

Live example | source

Там мы захватываем каждый из .region элементов, получить их братьев и сестер до первого, который не является .award (nextUntil), и filter из них, которые не каждый третий один.

(Не знаю, почему я использовал map в моем first working copy, filter имеет гораздо больше смысла.)

+0

, полагая, что каждый из div фактически не вложен и закрыт (плохая разметка в примере из OP), это не будет выбирать 10-й (последний) div как второй «третий» элемент. –

+0

Да, я смотрел на оригинал, как мне показалось, не хватает :) пришлось немного изучить его :) Отметьте это сейчас как работающий. –

+0

@MarkSchultheiss: Да, я немного подружился, когда я сделал живой пример. И я просто понял, что даже в исправлении я использовал «карту», ​​где «фильтр» был бы более подходящим выбором, поэтому я тоже исправил это. –

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