2012-10-09 98 views
0

鑑於這種HTML:jQuery選擇只有第一級DIV

​<div class="foo"> 
    select this 
    <div class="foo">​don't select this</div> 
</div> 
<div class="foo"> 
    select this 
</div> 

什麼是選擇搶在第一層,而不是嵌套一個剛剛的div?

所以查詢​$('.foo WHATEVER').length應該返回2.

jsfiddle這裏。

回答

3
選擇它的孩子

也許這樣? foo不是後代?

$('.foo').not('.foo .foo').length 

http://jsfiddle.net/DmDBV/

+0

有誰知道這個解決方案是否比$('body> .foo')更有效率。 –

+0

如果你的元素將成爲body的子元素,那麼$('body> foo')可能會更有效率,因爲它只搜索子元素 –

+0

我認爲這個解決方案效率較低但是更靈活,因爲html結構可以是不同的,divs不一定是直接的孩子。偉大的解決方案,這對我有用,謝謝! – Marc

4

您可以使用>孩子選擇:

$('body > .foo').length; 

http://jsfiddle.net/pSBxv/

+0

+1並非常感謝你,但如果div的是身體沒有直接的孩子,所以很遺憾,這不是很靈活(然而,這完全回答我的問題),這是行不通的。 – Marc

+0

@Marc不用客氣,你可以用.foo元素的父項替換body。 – undefined

+0

是的我知道,但他們在我的項目中沒有共同的父項,所以'$('。foo')。not('。foo .foo')'對我來說最適合。 – Marc