2011-07-07 23 views
1

這裏是什麼,我在HTML樣本:jQuery選擇了「所有不首先通過與類對象前一格」

<span class="a">Test</span> 
<div class="b"> 
    <div id="x_ABC">ABC must NOT be hidden</div> 
    <div id="x_DEF">DEF must be hidden</div> 
    <div id="x_GHI">GHI must be hidden</div> 
    <div id="JKL">JKL must NOT be hidden</div> 
</div> 

所有我想要的是用jQuery隱藏所有的div一個以「x」開頭的id在class「b」的div前面有一個帶有「a」類的html標籤。

我試過這段代碼:

$('.a + div.b div[id^=x]:gt(0)').hide() 

但它並不做我想做的。有誰知道如何使用類「a」,「b」和「id^= x」來修復選擇器?

謝謝!

回答

1

行情的屬性選擇是強制性的:

$('.a + div.b div[id^="x"]:gt(0)').hide() 

DEMO

由於性能原因,您可能需要使用.slice()

$('.a + div.b div[id^="x"]').slice(1).hide() 
+0

以及簡單的,不帶引號它的工作(即使他們是必須的)時,我寫的是:'$(」 .a + div.b div [id^=「x」]')。hide()'(它隱藏了所有相關的div)。儘管如此,我補充說... 我發現我的確切問題。我站點修改使用jQuery1.4.4,你的例子不適用於那個舊版本。現在得更新!謝謝! – Guile

+0

@Guile:?你什麼意思?您剛剛描述的選擇器引用了值... –

+0

此外,感謝您使用.slice(1)的性能提示!這是一個偉大的! – Guile

0

只是一個功能更強大的替代:

$('div.b').each(function(_, b) { 
    var $b = $(b); 

    if($b.prev().hasClass('a')) { 
     $b.children().slice(1).filter(function() { return this.id.charAt(0) === 'x' }).hide(); 
    } 
}); 
0

我認爲這是因爲這

$('.a + .b > *[id^="x"]:nth-child(n+2)').hide(); 
相關問題