2011-04-21 12 views
17

मैं एक मेज एक वर्ग निम्न के समान है है:jQuery: बच्चों() बनाम बच्चे चयनकर्ता ">"

<tr> 
    <td> <span class="myclass"></span> 
    </td> 
<tr> 

मेरी $ (this) टीआर तत्व पर सेट है और मैं कोशिश कर रहा हूँ "myclass" वर्ग सेट वाले स्पैन तत्वों तक पहुंचने के लिए। निम्नलिखित काम करने के लिए लगता है:

if ($(this).children('td').children('span').is('.myclass')){ 
    alert('in here'); 
} 

लेकिन जब इस का उपयोग करने की कोशिश कर:

if ($(this).children("td > span").is('.myclass')){ 

या इस:

if ($(this).children("td span").is('.myclass')){ 

यह नहीं करता है। मैंने सोचा कि उपर्युक्त 2 में से कोई भी इसी तरह के परिणामों के साथ आएगा (हालांकि विभिन्न विधियों के माध्यम से) लेकिन स्पष्ट रूप से नहीं।

मुझे यहां क्या याद आ रही है?

धन्यवाद!

उत्तर

19

children(selector) केवल उन बच्चों से मेल खाएगा जो selector से मेल खाते हैं। tr के बच्चों में से कोई भी नहीं (td एस) td > span से मेल खाता है, tr में span बाल तत्व नहीं हैं, केवल td एस और td > span !== td है।

documentation भी इस बारे में काफी स्पष्ट है:

मिलान किया तत्वों, वैकल्पिक रूप से एक चयनकर्ता द्वारा फ़िल्टर के सेट में प्रत्येक तत्व के बच्चों प्राप्त करें।


क्या आप के बजाय चाहते हो सकता है .find() है:

$(this).find("td > span") 

यह रिटर्न सभी सन्तान ही नहीं, बच्चों, कि चयनकर्ता से मेल।

0

मैंने इस here समझाया।

अंतर यह है कि पहला चयनकर्ता children कॉल के भीतर पूरी तरह से है, जबकि दूसरा नहीं है।

इसलिए, पहला व्यक्ति this के सभी बच्चों को देखता है जो td > span से भी मेल खाते हैं। (दूसरे शब्दों में, सभी (चयनकर्ता {<span> रों <td> रों के बच्चों}) खुद को कर रहे हैं कि सीधे this के बच्चों)

दूसरा एक this के सभी <td> बच्चों मिलेगा, तो सभी को लगता है उन <td> एस में <span> एस।

1
jQuery डॉक्स से

:

".find() और।बच्चों() विधियों, समान हैं, सिवाय इसके कि बाद केवल डोम पेड़ नीचे एक भी स्तर से यात्रा "

मैं इस का उपयोग कर की सलाह देते हैं:।

if ($(this).find('.myclass').length){ 
    alert('in here'); 
} 

चीयर्स

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