$ (इस) चयनकर्ता के बच्चों को कैसे प्राप्त करें?


2229

मेरे पास इसके समान एक लेआउट है:

<div id="..."><img src="..."></div>

और क्लिक के imgअंदर बच्चे का चयन करने के लिए एक jQuery चयनकर्ता का उपयोग करना चाहते divहैं।

पाने के लिए div, मुझे यह चयनकर्ता मिल गया है:

$(this)

मैं imgएक चयनकर्ता का उपयोग करके बच्चा कैसे प्राप्त कर सकता हूं ?

जवाबों:


2854

JQuery कंस्ट्रक्टर एक 2 पैरामीटर को स्वीकार करता है context, जिसे चयन के संदर्भ को ओवरराइड करने के लिए उपयोग किया जाता है।

jQuery("img", this);

जो .find()इस तरह का उपयोग करने के समान है :

jQuery(this).find("img");

यदि आप चाहते हैं कि इमल्स केवल क्लिक किए गए तत्व के प्रत्यक्ष वंशज हैं, तो आप भी उपयोग कर सकते हैं .children():

jQuery(this).children("img");

575
यह किसके लायक है: jQuery ("img", यह) आंतरिक रूप से रूपांतरित हो जाता है: jQuery (यह) .find ("img") तो दूसरा कभी भी इतना तेज़ होता है। :)
पॉल आयरिश

24
धन्यवाद @Paul, मैं चिंतित था कि खोज () का उपयोग करना गलत था , पता चला है कि यह एकमात्र तरीका है;)
आगोस

5
यदि नोड एक सीधा बच्चा है, तो यह केवल $ (यह) .children ('img') करने के लिए सबसे तेज़ नहीं होगा; ?
एडमायकोंक

11
@adamyonk infact not,
atleast not if it is to go to any with

3
मैं इस उदाहरण में बताए गए @PaulIrish के बिल्कुल विपरीत देख रहा हूं - jsperf.com/jquery-selectors-comparison-a । क्या कोई इस पर थोड़ा प्रकाश डाल सकता है? या तो मुझे परीक्षण-मामला गलत लगा, या पिछले 4 वर्षों में jquery ने इस अनुकूलन को बदल दिया।
जोनाथन वानास्को

471

आप भी इस्तेमाल कर सकते हैं

$(this).find('img');

जो सब वापस आ जाएगा imgकि वंशज हैंdiv


सामान्य मामलों में, ऐसा लगता है $(this).children('img')कि बेहतर होगा। उदाहरण के लिए, <div><img src="..." /><div><img src="..." /></div></div>संभवतया उपयोगकर्ता प्रथम-स्तरीय imgs खोजना चाहता है।
ब्यूटेल बटुक

137

यदि आपको पहली बार imgउतरने की आवश्यकता है, तो आप बिल्कुल एक स्तर पर हैं, तो आप कर सकते हैं

$(this).children("img:first")

6
क्या :firstकेवल " नीचे एक स्तर " से मेल खाता है, या क्या यह "पहले" से मेल खाता है जो img पाया गया था?
इयान बॉयड

3
@IanBoyd, .children()वह जगह है जहां "बिल्कुल एक स्तर नीचे" आता है और :firstजहां "पहला" आया है।
टायलर क्रॉम्पटन

3
@IanBoyd, उस तत्व के लिए बेहिसाब होगा। यह केवल लागू होगा यदि आप का उपयोग .find()करने के बजाय.children()
टायलर क्रॉम्पटन

2
यदि आप उपयोग कर रहे हैं: पहली बार .find () के साथ सावधान रहें, jQuery लगता है कि सभी वंशज मिलेंगे और फिर पहला तत्व लौटाएंगे, कभी
क्लेरेंस लियू

1
@ButtleButkus प्रश्न में, thisपहले से ही <div>युक्त करने के लिए एक संदर्भ था <img>, हालांकि अगर आपके पास संदर्भ से अलग होने के लिए टैग के कई स्तर हैं, तो आप निश्चित रूप से एक से अधिक children()कॉल की रचना कर सकते हैं
rakslice

76

यदि आपका DIV टैग IMG टैग के तुरंत बाद आता है, तो आप इसका उपयोग भी कर सकते हैं:

$(this).next();

16
.next () वास्तव में नाजुक है, जब तक आप हमेशा गारंटी नहीं दे सकते कि तत्व अगला तत्व होगा, एक अलग विधि का उपयोग करना बेहतर है। इस मामले में, आईएमजी एक वंशज है, न कि भाई का, तलाक का।
लोकलपीसीगयूट

ओपी ने स्पष्ट रूप से डिव के अंदर एक बच्चे के लिए कहा।
जियोर्जियो टेंपेस्टा


41

आप माता-पिता के सभी img तत्व को नीचे की तरह पा सकते हैं

$(this).find('img') or $(this).children('img')

यदि आप विशिष्ट img तत्व चाहते हैं, तो आप इस तरह लिख सकते हैं

$(this).children('img:nth(n)')  
// where n is the child place in parent list start from 0 onwards

आपके div में केवल एक img तत्व है। तो इसके लिए नीचे सही है

 $(this).find("img").attr("alt")
                  OR
  $(this).children("img").attr("alt")

लेकिन अगर आपके div में नीचे की तरह अधिक img तत्व है

<div class="mydiv">
    <img src="test.png" alt="3">
    <img src="test.png" alt="4">
</div>

तब आप दूसरे img तत्व का अधिकतम मूल्य ज्ञात करने के लिए ऊपरी कोड का उपयोग नहीं कर सकते। तो आप यह कोशिश कर सकते हैं:

 $(this).find("img:last-child").attr("alt")
                   OR
 $(this).children("img:last-child").attr("alt")

यह उदाहरण एक सामान्य विचार दिखाता है कि आप मूल वस्तु के भीतर वास्तविक वस्तु कैसे पा सकते हैं। आप अपने बच्चे की वस्तु को अलग करने के लिए कक्षाओं का उपयोग कर सकते हैं। यह आसान और मजेदार है। अर्थात

<div class="mydiv">
    <img class='first' src="test.png" alt="3">
    <img class='second' src="test.png" alt="4">
</div>

आप इसे नीचे के रूप में कर सकते हैं:

 $(this).find(".first").attr("alt")

और अधिक विशिष्ट के रूप में:

 $(this).find("img.first").attr("alt")

आप उपर्युक्त कोड के रूप में खोज या बच्चों का उपयोग कर सकते हैं। अधिक बच्चों के लिए http://api.jquery.com/children/ और http://api.jquery.com/find/ खोजें । उदाहरण देखें http://jsfiddle.net/lalitjs/Nx8a6/


35

JQuery में एक बच्चे को संदर्भित करने के तरीके। मैंने इसे निम्नलिखित jQuery में संक्षेपित किया है:

$(this).find("img"); // any img tag child or grandchild etc...   
$(this).children("img"); //any img tag child that is direct descendant 
$(this).find("img:first") //any img tag first child or first grandchild etc...
$(this).children("img:first") //the first img tag  child that is direct descendant 
$(this).children("img:nth-child(1)") //the img is first direct descendant child
$(this).next(); //the img is first direct descendant child

मैं nth-child ()
A McGuinness

31

DIV की आईडी को जाने बिना मुझे लगता है कि आप इस तरह से IMG का चयन कर सकते हैं:

$("#"+$(this).attr("id")+" img:first")

54
यह शायद वास्तव में काम करता है लेकिन यह रूबा गोल्डबर्ग का जवाब है :)
स्कॉट एवरडेन

8
और अगर आप उस कोड का उपयोग करने जा रहे हैं, तो कम से कम करें: $ ("#" + this.id + "img: first")
लोकलपीसीगयूटी

10
@LocalPCGuy आपका मतलब था: "और यदि आप मदद के लिए उस कोड कॉल का उपयोग करने जा रहे हैं "
gdoron मोनिका

आप ऐसा क्यों करेंगे यदि 'यह' पहले से ही वास्तविक div का चयन करता है? इसके अलावा, अगर div में आईडी नहीं है तो यह कोड काम नहीं करेगा।
जियोर्जियो टेम्पेस्टा

31

इस कोड को आज़माएं:

$(this).children()[0]

13
वह काम करेगा हालांकि यह एक प्रमुख तत्व देता है न कि एक jq वस्तु
redsquare

2
मुझे नहीं पता कि यह मौजूदा स्थिति के लिए सबसे अच्छा तरीका है, लेकिन अगर आप इस मार्ग पर जाना चाहते हैं और अभी भी एक jQuery ऑब्जेक्ट के साथ समाप्त होते हैं, तो बस इसे इस तरह से लपेटें $($(this).children()[0]):।
पितृगण

19
या इससे भी आसान$(this:first-child)
रेमी

4
$($(this).children()[x])उपयोग के बजाय $(this).eq(x)या यदि आप पहले वाला चाहते हैं, तो बस $(this).first()
२०:०२ पर क्रिस्टी मिहाई

16
@ रेमी: यह भी मान्य वाक्यविन्यास नहीं है। (किसी को भी नोटिस करने के लिए 2 साल का समय लिया ...)
बोल्टब्लॉक

23

आप निम्न विधियों में से किसी एक का उपयोग कर सकते हैं:

1 खोजें ():

$(this).find('img');

2 बच्चे():

$(this).children('img');


15

आप माता-पिता के भीतर उपलब्ध बाल तत्वों को संदर्भित करने के लिए चाइल्ड सेलेकोर का उपयोग कर सकते हैं ।

$(' > img', this).attr("src");

और नीचे यदि आपके पास संदर्भ नहीं है $(this)और आप अन्य फ़ंक्शन से imgउपलब्ध संदर्भ लेना चाहते हैं div

 $('#divid > img').attr("src");


8

यहां एक कार्यात्मक कोड है, आप इसे चला सकते हैं (यह एक सरल प्रदर्शन है)।

जब आप DIV पर क्लिक करते हैं तो आपको कुछ अलग तरीकों से छवि मिलती है, इस स्थिति में "यह" DIV है।

$(document).ready(function() {
  // When you click the DIV, you take it with "this"
  $('#my_div').click(function() {
    console.info('Initializing the tests..');
    console.log('Method #1: '+$(this).children('img'));
    console.log('Method #2: '+$(this).find('img'));
    // Here, i'm selecting the first ocorrence of <IMG>
    console.log('Method #3: '+$(this).find('img:eq(0)'));
  });
});
.the_div{
  background-color: yellow;
  width: 100%;
  height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="my_div" class="the_div">
  <img src="...">
</div>

आशा है ये मदद करेगा!


5

आपके <img>अंदर 0 से कई टैग हो सकते हैं<div>

एक तत्व खोजने के लिए, एक का उपयोग करें .find()

अपने कोड को सुरक्षित रखने के लिए, a का उपयोग करें .each()

उपयोग करना .find()और .each()एक साथ 0 <img>तत्वों के मामले में अशक्त संदर्भ त्रुटियों को रोकता है, जबकि कई <img>तत्वों को संभालने की अनुमति भी देता है ।

// Set the click handler on your div
$("body").off("click", "#mydiv").on("click", "#mydiv", function() {

  // Find the image using.find() and .each()
  $(this).find("img").each(function() {
  
        var img = this;  // "this" is, now, scoped to the image element
        
        // Do something with the image
        $(this).animate({
          width: ($(this).width() > 100 ? 100 : $(this).width() + 100) + "px"
        }, 500);
        
  });
  
});
#mydiv {
  text-align: center;
  vertical-align: middle;
  background-color: #000000;
  cursor: pointer;
  padding: 50px;
  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<div id="mydiv">
  <img src="" width="100" height="100"/>
</div>


तुमने ऐसा क्यों किया? $("body").off("click", "#mydiv").on("click", "#mydiv", function() {
1:22 पर क्रिस 22

मैं नहीं जानता कि कैसे या कहाँ @ एलेक्स अपने स्निपेट का उपयोग कर रहा है। इसलिए, मैंने इसे यथासंभव सुरक्षित और सामान्य बना दिया। किसी ईवेंट को बॉडी में शामिल करने से यह बन जाएगा इसलिए ईवेंट उस समय भी ट्रिगर हो जाएगा, जब इवेंट के निर्माण के समय div उस स्थिति में नहीं था। एक नया बनाने से पहले घटना को साफ़ करने से हैंडलर को एक घटना शुरू होने पर एक से अधिक बार चलने से रोकता है। यह मेरी तरह से करने के लिए आवश्यक नहीं है। बस ईवेंट को डिव से जोड़ने से भी काम चल जाएगा।
जेसन विलियम्स

धन्यवाद। मैंने इसे पहले एक स्क्रिप्ट में देखा है और जब यह प्रोग्रामर के इरादे से काम करता है, जब मैंने इसे एक मोडल विंडो के लिए उपयोग करने की कोशिश की थी, तब भी इवेंट ने सिंगल क्लिक पर कई मॉडल्स बनाए। मुझे लगता है कि मैं इसे गलत उपयोग कर रहा था, लेकिन event.stopImmediatePropagation()ऐसा होने से रोकने के लिए मैंने तत्व का उपयोग करके घाव किया ।
1:22 बजे क्रिस 22

4

$(document).ready(function() {
  // When you click the DIV, you take it with "this"
  $('#my_div').click(function() {
    console.info('Initializing the tests..');
    console.log('Method #1: '+$(this).children('img'));
    console.log('Method #2: '+$(this).find('img'));
    // Here, i'm selecting the first ocorrence of <IMG>
    console.log('Method #3: '+$(this).find('img:eq(0)'));
  });
});
.the_div{
  background-color: yellow;
  width: 100%;
  height: 200px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id="my_div" class="the_div">
  <img src="...">
</div>


0

आप उपयोग कर सकते हैं

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
 $(this).find('img');
</script>

11 साल पहले के दर्शन के उत्तर से यह कैसे अलग है?
डेविड

0

यदि आपका img div के अंदर बिल्कुल पहला तत्व है तो कोशिश करें

$(this.firstChild);

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.