जांचें कि क्या किसी पूर्वज के पास jQuery का उपयोग करने वाला वर्ग है


156

अगर कोई है तो जांचने के लिए jQuery में कोई रास्ता नहीं है माता-पिता, भव्य-माता-पिता, महान-माता-पिता के पास एक वर्ग है, ।

मेरे पास एक मार्कअप संरचना है, जिसने मुझे कोड में इस तरह का काम करने में छोड़ दिया है:

$(elem).parent().parent().parent().parent().hasClass('left')

हालाँकि, कोड पठनीयता के लिए मैं इस तरह की चीज़ से बचना चाहूँगा। क्या "किसी भी माता-पिता / दादा-दादी / परदादा-माता-पिता के पास यह वर्ग है" कहने का कोई तरीका है?

मैं jQuery 1.7.2 का उपयोग कर रहा हूं।


stackoverflow.com/questions/16863917/… - यदि कोई व्यक्ति इसे jQuery के बिना करना चाहता है
रॉबर्ट नेस्टिरोज

जवाबों:


303
if ($elem.parents('.left').length) {

}

19
धन्यवाद, बस मुझे क्या चाहिए! रिकॉर्ड के लिए, जबकि .lengthसत्य मूल्य के रूप में व्यवहार करने की प्रथा जेएस में काफी प्रचलित है, यह बहुत स्पष्ट और समझने में आसान है.length > 0
डोलियो

2
यहाँ jQuery के लिंक है .parents () प्रलेखन
H डॉग

75

तत्व पूर्वजों के लिए फ़िल्टर करने के कई तरीके हैं।

if ($elem.closest('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents('.parentClass').length /* > 0*/) {/*...*/}
if ($elem.parents().hasClass('parentClass')) {/*...*/}
if ($('.parentClass').has($elem).length /* > 0*/) {/*...*/}
if ($elem.is('.parentClass *')) {/*...*/} 

चयनकर्ता की जाँच करते समय सावधान , closest() विधि में तत्व शामिल है।

वैकल्पिक रूप से, यदि आपके पास एक अद्वितीय चयनकर्ता है $elem, जैसे #myElem, आप उपयोग कर सकते हैं:

if ($('.parentClass:has(#myElem)').length /* > 0*/) {/*...*/}
if(document.querySelector('.parentClass #myElem')) {/*...*/}

यदि आप अपने किसी पूर्वज वर्ग के किसी तत्व को केवल स्टाइल के उद्देश्य से मेल खाना चाहते हैं, तो बस एक CSS नियम का उपयोग करें :

.parentClass #myElem { /* CSS property set */ }

2
मैं यह कहने के लिए उद्यम कर सकता हूं (यह परीक्षण किए बिना) कि यह विधि बेहतर है। Elem.parents पूरे माता-पिता डोम को पीछे छोड़ देगा, जहां निकटतम () (संभवत:) उस तत्व के साथ निकटतम माता-पिता को खोजने के बाद (शायद) रुक जाए और इसलिए अधिक कुशल है। यह एक अशिक्षित अनुमान है। मैं आमतौर पर निकटतम () का उपयोग करता हूं। लगता है जैसे मुझे अपने ब्लॉग के लिए शोध करने के लिए एक नया विषय मिला! : पी
दुदेवाड

@dudewad हाँ यह है, लेकिन यह काफी हाल का है। मेरा मतलब पुराने jq संस्करण, AFAIK में, यह मामला नहीं था। माता-पिता का पाश निकटतम () का उपयोग करके पहले से मिलान किए गए माता-पिता पर नहीं टूट रहा था, लेकिन अब यह है। (जो jq संस्करण के बाद से पता नहीं है, लेकिन मैं इस बयान पर सही होना निश्चित है)
ए। वोल्फ

जानकर अच्छा लगा, जानकारी के लिए धन्यवाद। अजीब है कि उन्होंने पहले संस्करण से ब्रेक का निर्माण नहीं किया होगा।
दुबेवाद

2
जब माता-पिता नहीं मिलते हैं, तो माता-पिता () निकटतम () jsperf.com/closest-vs-parents-foobar
एलेक्स

3
@ एलेक्स क्विट इंटररस्टिंग वास्तव में, इनपुट के लिए thx! BTW, प्रश्न को फिर से पढ़ते हुए, तत्व के लिए जाँच करें Is there any way in jQuery to check if any parent,..., closest()तो यह वास्तव में सवाल का जवाब नहीं दे रहा है, ओपी खुद को तत्व को बाहर करने की इच्छा कर सकता है, इसलिए हां, उत्तर का उपयोग करना था.parents()
ए। वोल्फ

7

आप parentsनिर्दिष्ट .classचयनकर्ता के साथ विधि का उपयोग कर सकते हैं और जांच सकते हैं कि उनमें से कोई भी इसका मिलान करता है:

if ($elem.parents('.left').length != 0) {
    //someone has this class
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.