2012-04-19 33 views
0

我有以下的標記:jQuery的目標元素的每n個兄弟姐妹

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

我怎樣可以針對.region後第3元,這樣我得到這樣的事情?

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

請注意,它不包括第一個.region之後的前兩個.award元素。

在此先感謝!

+0

可能重複http://stackoverflow.com/questions/1260277/addclass-every-nth – Armatus 2012-04-19 14:12:25

+0

@Armatus :我不這麼認爲,不是有不同的出發點。 – 2012-04-19 14:19:44

+0

這些div是爲了*兄弟姐妹*,對吧?你還沒有關閉它們,這意味着你有八層兒童,但我肯定這不是你的意思...... – 2012-04-19 14:21:32

回答

2

nextUntileq結合應做到:

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

不,一個比這更復雜,處理第六元素:

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

Live example | source

在那裏,我們抓住每一個.region元素,讓他們的兄弟姐妹到第一個不是​​(nextUntil),並filter出來的人是不是每第三個。

(不知道爲什麼我在first working copy使用mapfilter更有道理。)

+0

假定每個div實際上並不是嵌套的並且是封閉的(在OP的例子中壞標記),這不會選擇第10個(最後一個)div作爲第二個「第三」元素。 – 2012-04-19 14:19:24

+0

是的,我在看原版,因爲它似乎不足夠:)必須研究一下:)檢查這一個關閉現在工作。 – 2012-04-19 14:24:39

+0

@MarkSchultheiss:是的,當我做了一個活生生的例子時,我有點臉色有變。我剛剛意識到,即使在修復中,我使用了'map',其中'filter'將是更合適的選擇,所以我也修復了這個問題。 – 2012-04-19 14:26:14