2010-03-31 15 views
13

इस तरह यह काफी आसान होना चाहिए लगता है का पता लगाने - लेकिन मैं डॉक्स (http://api.jquery.com/hidden-selector/ और http://api.jquery.com/visible-selector/) के अनुसार के लिए यहjQuery दिखाई देता है लेकिन छिपा तत्वों

सही चयनकर्ता नहीं मिल सकता है ...

तत्वों कई कारणों से छिपाया जा सकता है:

एक पूर्वज तत्व छुपा हुआ है, इसलिए तत्व पृष्ठ पर नहीं दिखाया गया है।

जो मैं जानना चाहता हूं वह है "यह तत्व दृश्यमान है, लेकिन एक छिपे हुए माता-पिता में निहित है"। हां, अगर मैंने माता-पिता को दृश्यमान बनाया है, तो यह तत्व भी दिखाई देगा।

उत्तर

28

यह कुछ आप करेंगे आमतौर पर उपयोग, अपने खुद के चयनकर्ता बनाना है :) यहाँ एक उदाहरण है:

jQuery.expr[':'].hiddenByParent = function(a) { 
    return jQuery(a).is(':hidden') && jQuery(a).css('display') != 'none'; 
}; 

आप इस तरह उपयोग कर सकते हैं, परीक्षण मार्कअप:

<div style="display: none" id="parent"> 
    <div> 
     <div id="child">Test</div> 
    </div> 
</div> 
​ 

के उदाहरण का उपयोग करें:

$("div:hiddenByParent").length;​​​​​​​​​​​​​​​​​​ // "2" (plain div + child match) 
$("#child").is(":hiddenByParent"); // true 

वैकल्पिक रूप से, अगर आप इस तरह .filter() फ़ंक्शन का उपयोग कर सकते हैं:

$('selector').filter(function() { 
    return $(this).is(':hidden') && $(this).css('display') != 'none'; 
} 
+1

पर सही उत्तर को बदलने की आवश्यकता है, हमेशा निक के रूप में महान उत्तर!लेकिन अगर किसी तत्व में दृश्यता सेट छिपी हुई है, तो आपको इसे चयनकर्ता 'वापसी $ (ए) .is (': छुपा ') और $ (ए)। सीएसएस (' प्रदर्शन ') के रूप में उपयोग करने की आवश्यकता होगी! =' कोई भी '&& $ (ए)। सीएसएस (' दृश्यता ') ==' दृश्यमान '; ' – Mottie

+1

@ फ़ूजी - अच्छा बिंदु,' दृश्यमान 'सामान" छुपा "नहीं है, फिर भी यह पृष्ठ पर स्थान पर कब्जा कर रहा है। मुझे लगता है कि यह निर्भर करता है कि क्या आप पूरी तरह छिपी चीजों या चीजों की तलाश में हैं जो पेज पर कोई कमरा नहीं लेते हैं। आप जो भी परिभाषा के बाद हैं, निश्चित रूप से उस दृष्टिकोण का उपयोग करें। –

+0

शानदार! बस मैं चाहता था कि जवाब, और पहले Google परिणाम भी। मैं केवल इतना कहूंगा कि मुझे लगता है कि एक अच्छा चयनकर्ता नाम "अदृश्य" होगा। यह "दृश्यमान" है ... लेकिन * दृश्यमान में। –

-1

मुझे नहीं लगता कि सिर्फ एक चयनकर्ता काम करेगा, लेकिन

<script> 
function parentHidden(id) { 
    return (!$(id).is(':hidden')) && $(id).parent().is(':hidden'))); 
}   
</script> 

आपको क्या चाहिए लौटना चाहिए। यदि आपको इसके पूर्वजों की जांच करने की आवश्यकता है और न केवल यह माता-पिता है, तो आप केवल $(id).parent().is(':hidden') भाग को उस फ़ंक्शन के साथ प्रतिस्थापित कर सकते हैं जो 'पूर्वजों श्रृंखला' की पुनरावृत्ति करेगा।

+0

लेकिन वह वास्तव में है मैं नहीं है क्या चाहते हैं ... विशेष रूप से बिंदु 4. यह भी कहते हैं, "एक तत्व है, तो छिपा हुआ माना जाता है यह या उसके माता-पिता दस्तावेज़ में कोई स्थान नहीं लेते हैं " – Paul

+0

आह, मैं देखता हूं, इसके बारे में खेद है। उत्तर अद्यतन कर रहा है। –

+0

लेकिन यह मुझे नहीं मिलता है कि तत्व वास्तव में दिखाई देता है - यह सिर्फ यह कहता है कि क्या माता-पिता दिखाई दे रहा है, जो – Paul

1

यदि यह एक विशिष्ट तत्व है कि आप तो देख रहे है आप जांच कर सकता है यह प्रदर्शन संपत्ति

$('#element').css('display') != 'none'; 

है यदि यह एक विशिष्ट तत्व तो आप माता-पिता नोड्स का उपयोग कर छिपे हुए हैं मिल सकता है नहीं था: छिपा हुआ फिर अपने इच्छित प्रकार के नोड्स को देखने के लिए कस्टम फ़ंक्शन का उपयोग करें। ईजी।

$('parent-selector:hidden').find('node-selector').each(function(){ 
    if($(this).css('display') != 'none') { 
    // do what you wanted 
    } 
}); 

आप फिर एक साफ चयनकर्ता चाहते हैं मुझे लगता है कि यह है कि आप भाग्य से बाहर होने के लिए के रूप में मुझे नहीं लगता कि आप क्या चाहते सीएसएस कल्पना का हिस्सा है करते जा रहे हैं, तो एक के रूप में वहाँ नहीं होगा jQuery में चयनकर्ता।

5

jQuery है यह सब में निर्मित nowdays

$("#child").closest(':hidden').length == 0