2010-03-08 13 views
80

एक सरलीकृत उदाहरण देने के लिए, मुझे पृष्ठ पर कई बार बार-बार दोहराया गया है (यह गतिशील रूप से जेनरेट किया गया है):jQuery: माता-पिता के किसी विशेष बच्चे को कैसे प्राप्त करें?

<div class="box"> 
    <div class="something1"></div> 
    <div class="something2"> 
     <a class="mylink">My link</a> 
    </div> 
</div> 

क्लिक करने पर, मैं लिंक के माता-पिता के साथ प्राप्त कर सकता हूं:

$(".mylink").click(function() { 
    $(this).parents(".box").fadeOut("fast"); 
}); 

हालांकि ... मुझे उस विशेष अभिभावक के <div class="something1"> पर जाना होगा।

असल में, क्या कोई मुझे बता सकता है कि इसे उच्च स्तर के भाई को सीधे संदर्भित करने में सक्षम होने के बिना कैसे संदर्भित किया जाए? चलिए इसे बड़े भाई कहते हैं। बड़े भाई के वर्ग के नाम का सीधा संदर्भ पेज पर उस तत्व के हर उदाहरण को फीका कर देगा - जो वांछित प्रभाव नहीं है।

मैंने कोशिश की है:

parents(".box .something1") ... no luck. 
parents(".box > .something1") ... no luck. 
siblings() ... no luck. 

कोई भी? धन्यवाद।

+0

अनुराग का जवाब सही-यह निश्चित रूप से मुझे रोकने और थिंक बनाया की तरह लग नहीं हो सकता है, लेकिन यह अपने कोड है कि आपके चयनकर्ता को विफल कर रही है में एक ज़बरदस्त टाइपो उनका कहना है। चयनकर्ता, jQuery में, '। माता-पिता() '* नहीं *'। माता-पिता() ' –

+0

@ricebowl: गलत है। http://api.jquery.com/parents/ – SLaks

+0

@ricebowl ... पैरेंट() मुझे div कुछ 2 देगा, इसलिए मुझे div बॉक्स में जाने के लिए माता-पिता() की आवश्यकता है। – Tom

उत्तर

120

कॉलिंग .parents(".box .something1") चयनकर्ता .box .something से मेल खाने वाले सभी मूल तत्वों को वापस कर देगा। दूसरे शब्दों में, यह उन माता-पिता तत्वों को वापस कर देगा जो .something1 हैं और .box के अंदर हैं।

आप निकटतम माता पिता के बच्चों को पाने के लिए, की जरूरत है इस तरह: चाचा को खोजने के लिए तो है कि माता-पिता तत्व पर .children कॉल

$(this).closest('.box').children('.something1') 

इस कोड को कॉल .closest एक चयनकर्ता मिलान अंतरतम माता पिता पाने के लिए, आप देख रहे हैं

+0

उत्कृष्ट धन्यवाद, वांछित के रूप में बिल्कुल काम करता है। – Tom

+0

मुझे पता है कि यह थोड़ा पुराना है, लेकिन इस मामले में ** ** (** ** ** ** ** ** के बजाय ** माता-पिता() ** का उपयोग करना बेहतर नहीं है क्योंकि मुझे लगता है कि ** निकटतम() * के साथ और अधिक पेड़ ट्रैवर्सल है *? – acSlater

+1

@acSlater: वह _needs_ पेड़ ट्रैवर्सल। 'पैरेंट()' गलत तत्व है। – SLaks

13
$(this).parent() 

ट्री ट्रेवर्सल मज़ा

$(this).parent().siblings(".something1"); 

$(this).parent().prev(); // if you always want the parent's previous sibling 

$(this).parents(".box").children(".something1"); 

और भी बहुत कुछ तरीके है, तो आप इन docs लिए उपयोगी हो सकती।

+0

धन्यवाद लेकिन माता-पिता की तलाश नहीं कर रहा था, बल्कि माता-पिता के एक और बच्चे (या वास्तव में दादा)। – Tom

+0

हेहे ... यह वास्तव में एक पारिवारिक संबंध है। – Tom

5

यदि मैं आपकी समस्या को सही ढंग से समझता हूं, $(this).parents('.box').children('.something1') क्या आप यह देख रहे हैं?

+0

यह भी काम करता है। – Tom

3

आप कोष्टक के भीतर .children() साथ .each() और एक का भी उपयोग कर सकता है:

//Grab Each Instance of Box. 
$(".box").each(function(i){ 

    //For Each Instance, grab a child called .something1. Fade It Out. 
    $(this).children(".something1").fadeOut(); 
}); 
11

इस वर्ग box के साथ पहली बार माता-पिता मिल जाएगा तो something मिलान regex के साथ पहले बच्चे वर्ग खोजने के लिए और आईडी मिलता है।

$(".mylink").closest(".box").find('[class*="something"]').first().attr("id")