2014-11-21 43 views
1

給定一個包含許多div子元素的div,並且運行時派生號碼爲ChildrenPerRow,如何在每個「虛擬」行中選擇不是該虛擬行上最後一個元素的所有子項?根據nth,mth,oth,...,pattern來選擇孩子嗎?

例如,如果ChildrenPerRow = 5,選擇應該返回1,第2,第3,第4,第6,第7,第8,第9,第11,第12,第13,第14等,如果ChildrenPerRow = 4,選擇應該返回1號

var FilterStr = ''; 
for(var i=1; i<ChildrenPerRow;i++){ 
    FilterStr+=':nth-child('+i+'n),'; 
} 
FilterStr = FilterStr.replace(/(^,)|(,$)/g, ""); 
$Children.filter(FilterStr).doSomething(); 

,類似的會產生一個選擇:,第2,第3,第5,第6,第7,第9,第10,第11,第13,第14,第15等

我已經使用類似嘗試

:nth-child(1n),:nth-child(2n),:nth-child(3n),:nth-child(4n) 

B這選擇每個孩子。我也覺得使用一下來構建選擇器字符串效率不高。我認爲這可以使用不選擇器來完成,但我想知道如何使用正選擇器來完成。

所以問題是,什麼是有效的方式來實現這一點?

回答

3

這是你在找什麼?

$Children.filter(':not(:nth-child(' + ChildrenPerRow + 'n))'); 

沒有:not()選擇你要建立這樣一個選擇:

$Children.filter(':nth-child(5n+1), :nth-child(5n+2), :nth-child(5n+3), :nth-child(5n+4)') 
+0

我想是這樣,讓我檢查我什麼時候回來。 – Nick 2014-11-21 22:04:26

3

如果我理解正確

$("div div").not(":last-child"); 

應該夠了,

爲10孩子的div

<div> 
    <div>1</div> 
    <div>1</div> 
    <div>1</div> 
    <div>1</div> 
    <div>1</div> 
</div> 
<div> 
    <div>1</div> 
    <div>1</div> 
    <div>1</div> 
    <div>1</div> 
    <div>1</div> 
</div> 

它將返回8,ommiting每一位父母div的最後一個子

DEMO小提琴 http://jsfiddle.net/1yg3z86p/1/

+0

該行不包裹在div的,他們是「虛擬」行,因此它與許多一個div容器直接的兒童divs。每行的項目根據父容器的寬度而變化。 – Nick 2014-11-21 22:01:51

+0

好的,在這種情況下,投票給戴夫,charlietfl也會工作,儘管它應該是!== ChildrenPerRow - 1排除最後一個元素 – 2014-11-21 22:13:14

1

可以使用filter(fn)index參數,使更多的東西可讀

$('.parentClass .childClass').filter(function(index){ 
    return index % (ChildrenPerRow-1) !==0; 
}).doSomething();