2012-05-15 11 views
6

क्या कोई तत्व चलाने के लिए, कई तत्वों पर क्लिक ईवेंट संलग्न करने का कोई तरीका है, और उसके बाद सभी बच्चों को तत्व के अलावा, एक कार्य चलाने के लिए तत्वों को छोड़कर कोई तत्व है?jQuery चयनकर्ता इस बच्चे को नहीं

एक भयानक व्याख्या दी गई है कि, लेकिन मैं कुछ इस तरह की तलाश में हूँ:

<h3 id="sender_header" class="block_header"><span>Sender</span></h3> 
<div id="sender_container" class="container"> 
    <p>Show or hide this, based on which H3 is clicked.</p> 
</div> 
<h3 id="receiver_header" class="block_header"><span>Receiver</span></h3> 
<div id="receiver_container" class="container"> 
    <p>Show or hide this, based on which H3 is clicked.</p> 
</div> 
<h3 id="delivery_header" class="block_header"><span>Delivery</span></h3> 
<div id="delivery_container" class="container"> 
    <p>Show or hide this, based on which H3 is clicked.</p> 
</div> 
<h3 id="items_header" class="block_header"><span>Items</span></h3> 
<div id="items_container" class="container"> 
    <p>Show or hide this, based on which H3 is clicked.</p> 
</div> 
.... etc, etc (many more of the same) 

आशा यह भी जटिल नहीं है: यहाँ

$(".block_header").click(function(){ 
    $(".block_header span:not(this span)").toggleClass("collapse expand"); 
    $(".container:not(this+div.container)").slideToggle(); 
}); 

नमूना HTML है। यह मुझे बहुत सी कोड बचाएगा।

उत्तर

14

चयनकर्ता में तत्व को छोड़कर, आप not() फ़ंक्शन का उपयोग कर सकते हैं, जो jQuery सेट से निकालने के लिए DOM तत्व या jQuery ऑब्जेक्ट को स्वीकार करता है।

$(".block_header").click(function(e) { 
    $('.block_header span').not($(this).find('span')).toggleClass("collapse expand"); 

    $('.container').not($(this).next()).slideToggle(); 
}); 
+1

शानदार! बहुत बहुत धन्यवाद। –

+0

धन्यवाद, मुझे यह बहुत उपयोगी पाया – esd

2
$(".block_header").click(function(){ 
    $(".block_header span").not($('span', this)).toggleClass("active"); 
    $(".container").not($(this).next()).slideToggle(); 
}); 
+0

प्रयास के लिए धन्यवाद, लेकिन यह बिल्कुल काम नहीं करता है। –

+0

@ रिचर्ड हैरिस मैंने अपना जवाब अपडेट किया। कृपया –

+0

जांचें वहां आप जाते हैं। इससे मदद मिली। बहुत धन्यवाद! :) –

1

इस प्रयास करें की तरह

$(".block_header").not(this).find("span").toggleClass("collapse","expand"); 

$(".container").not(this).not("div.container").slideToggle(); 
+1

यह मुझे सही दिशा में बंद कर दिया। चीयर्स! –

+0

यह जानकर खुशी हुई कि यह आपकी समस्या का समाधान करता है। चीयर्स! – Imdad

3

यह है:

$(this).parent('h3').siblings('h3').children('span').addClass('active'); 
$(this).parent('h3').siblings('h3').next('div.container').slideToggle('active'); 

कि चाल करना चाहिए!

हालांकि, क्या मुझे लगता है कि आप केवल एक सक्रिय होंगे?

$('.active').removeClass('active').parent('h3').next('div.container').slideUp(); 

आशा में मदद करता है :)

संपादित करें:

अतिरिक्त चतुर होने के लिए, एक के रूप में सक्रिय एक स्टोर

अगर ऐसा है, इस सबसे आसान है चर। तो क्लिक पर:

$active = $(this); 

फिर, अगली बार जब आप तत्व फिर से पाने के जाने के लिए jQuery प्राप्त किए बिना ऐसा कर सकते हैं,:

$active.removeClass('active').parent('h3').next('div.container').slideUp(); 
$active = $(this); 
+0

पवित्र गाय आप लोग शानदार हैं! बहुत उपयोगी उत्तर। बहुत बहुत धन्यवाद! ओह, और हाँ: एक समय में केवल एक ही सक्रिय होगा। –

+0

मैं आपका वोट देना चाहता हूं लेकिन मुझे 15 प्रतिष्ठा की आवश्यकता है और मेरे पास 11 है। क्षमा करें। अगर मैं दो समाधानों को "हल" के रूप में चिह्नित कर सकता हूं तो मैं आपकी बहुत सारी युक्तियों के लिए भी चुनूंगा। चीयर्स! –

संबंधित मुद्दे