2014-01-31 21 views
1

比方說,我有這個標記不工作:jQuery有()如預期

<div class="comment"> 
    <span class="test">some content here</span> 
<p>Lorem ipsum</p> 
</div> 

<div class="comment"> 
    <p>Lorem ipsum</p> 
</div> 

我要檢查是否存在內div.commentspan.test和是否存在隱藏所有div.comment,並只顯示其中div.commentspan.test不存在。

我被困在這裏:

if($("span.test").length) { 
    $(".element:has(span.test)").hide(); 

我不知道如何繼續這個實現我想要的。

關於如何完成這項工作的任何建議?

+12

我看不到'。先後()的任何調用' – Pointy

+0

這會不會只是做的伎倆? '(「。test」)。parent()。hide();' – timo

+0

對不起,我忘了添加它 – agis

回答

0
$("div.comment").filter(function() { 
    return $(this).find('span.test').length 
}).hide(); 

jsFiddle example

2

這將隱藏有span.test

$('.comment span.test').parent('.comment').hide(); 
0

事情是這個 -

$("span.test").closest('.comment').hide(); // hide comment that contains .test 
3

所有評論您可以使用:has這樣

$('.comment:has(span.test)').hide() 

或者.has()

$('.comment').has('span.test').hide() 
+0

+1,我真的不知道'has()'函數。它是一種「新」功能,1 - 2年?無法確定何時引入。 – davidkonrad

+1

@davidkonrad它說''has()'psuedo選擇器被添加到'jQuery 1.1.4'中並且'.has()'被添加到了'jQuery 1.4'中,所以你可以用它作爲參考出來http://en.wikipedia.org/wiki/JQuery#Release_history –

+0

我喜歡這一點,'find()>'的簡寫。謝謝。 – davidkonrad