2013-02-07 158 views
1

是否有可能編寫單個選擇器來查詢具有隱藏父元素的所有元素,其中隱藏父元素沒有特定的類。jQuery Selector返回沒有特定類的元素隱藏的所有元素

例如,給定下面的HTML,它只會選擇Field2,因爲它的父項是隱藏的,而隱藏它的父元素沒有「標籤」類。

<div class="tab" style="display: none;"> 
    <div> 
     <input name="Field1" /> 
    </div> 
    <div style="display: none;"> 
     <input name="Field2" /> 
    </div> 
</div> 
<div class="tab" style="display: none;"> 
    <div> 
     <input name="Field3" /> 
    </div> 
</div> 
<div class="tab"> 
    <div> 
     <input name="Field4" /> 
    </div> 
</div> 

回答

0

這是什麼ü[R找?

$("div:not(.tab) > *:hidden") 

$("div:hidden:not(.tab) > *:hidden") 

---- ----編輯您 可以這樣做

$("div[style='display: none;']:not(.tab) > *") 

,但它是不是一個真正的好方法。我寧願改變這些style ='display:none;'到一個CSS類,然後像這樣運行;我在這裏測試http://jsfiddle.net/bighostkim/KaaYc/

$("div.noShow:not(.tab) > *") 
+0

這看起來很有希望,但它也返回Field1和Field3。我還需要返回不在選項卡內的隱藏字段。 – nfplee

+0

發生這種情況是因爲:隱藏選擇器確實檢查它是否可見。所以,如果父母不可見:隱藏的匹配。我假設你正在尋找style ='display:none'的div。在這種情況下:隱藏不符合您的要求。 – allenhwkim

+0

再次感謝。這正確地返回了正確的節點,但如果我使用jQuery隱藏節點,那麼它將不具有.noShow類,並且該元素將不會被選中。 – nfplee

0
$(':hidden:has(*)').filter(function(){ 
    return !this.class; 
}).find('*').dojQueryFuncHere(); 

雖然我必須說,這不是做的最好的事情,查詢「東西」 - *

0

這個怎麼樣?

$('div:not(.tab):hidden input'); 
+0

謝謝,但這返回字段1,3,我需要它只返回Field2。 – nfplee

0

試試這個:

$("input").filter(function() { 
    var parent = $(this).parent(); 
    return parent.css("display") == "none" && parent.not(".tab"); 
} 
0

當父隱藏,其後代也被認爲是隱藏的,因此:hidden選擇不會做的正是你所需要的。唯一的方法是在這種情況下實際檢查style屬性。

$("[style*='display: none']:not(.tab) >"); 

這將選擇與style="display: none"(需要:none之間的空間中的所有元素,但你也可以編寫另一個選擇,不需要它,而沒有.tab類。

如果父類可以被style以外的其他類所隱藏,那麼這顯然不起作用,在這種情況下,除非要解析樣式表並檢查每個父類及其類,否則不會有太多事情要做。

http://jsfiddle.net/ExplosionPIlls/zXmXL/1/

$("body :hidden:not(.tab) >")對照。使用body是因爲所有<head>:hidden

http://jsfiddle.net/ExplosionPIlls/zXmXL/3/

相關問題