2013-02-09 5 views
10

मेरे पास बहुत से सबमेनस के साथ एक कोड है जो समान वर्ग नाम साझा करता है।jQuery के विपरीत। सबसे अच्छा (शीर्ष/सुदूर-अधिकांश?)

.menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
    .sub-menu 
     .elem 
     .elem 
    .sub-menu 

ध्यान दें कि .sub-menu अनंत स्तरों वाली हो सकती है:

यहाँ एक संरचना है।

तो मैं इसे कैसे प्राप्त करूं: .elem क्लिक किया गया है, मैं ऊपर से सबसे अधिक .sub-menu तक पहुंचने के लिए डीओएम ऊपर की ओर जाना चाहता हूं और इसके लिए एक शैली लागू करता हूं। मुझे .closest() और .parent() और .find() से अवगत है, लेकिन मुझे नहीं पता कि jQuery में ऐसी सुविधा है जैसे .topMost(selector)?

एकमात्र तरीका मैं सोच सकता हूं कि यह एक लूप चला रहा है और .closest('.sub-menu') से नए तत्व के माध्यम से जा रहा है जब तक उसकी लंबाई शून्य न हो (इस वर्ग के साथ कोई और माता-पिता नहीं हैं, इसलिए यह सबसे ज्यादा होना चाहिए)। हालांकि, मुझे लगता है कि इसके लिए एक और व्यावहारिक दृष्टिकोण होना चाहिए।

उत्तर

19

आप 'दूर का' पेरेंट तत्व चाहते हैं के सबसे करीबी के विपरीत 'द्वारा मान लिया जाये, तो आप इस तरह parents().last() उपयोग कर सकते हैं,:

$('.elem').click(function() { 
    var $topSubMenu = $(this).parents('.sub-menu').last(); 
}); 

ध्यान दें, यदि आप सरणी में पिछले तत्व चाहते jQuery अप को पार करता के रूप में डोम, इसलिए शीर्ष-स्तरीय आइटम संग्रह में अंतिम होगा।

21

प्रश्न थोड़ा भ्रामक है। closest() गलत व्याख्या की जा सकती है। दरअसल इसका मतलब है कि पहले मैच मिलने तक पेड़ को खोजना है। तो विपरीत तब तक पेड़ को खोजता है जब तक एक मैच नहीं मिलता है और वह विधि है। first().

सभी वंशजों को find() का उपयोग करने के लिए उपयोग किया जा सकता है। find() के विपरीत parents() है।

निकटतम() (सभी स्तर) सेट में प्रत्येक तत्व के लिए, पहला तत्व है कि तत्व में ही परीक्षण और डोम पेड़ में अपने पूर्वजों के माध्यम से ऊपर से गुजरने से चयनकर्ता से मेल खाता हो।

पहले() (सभी स्तर) सेट की पहली करने के लिए मिलान तत्वों के सेट को कम

माता-पिता() (सभी स्तर) प्रत्येक तत्व के पूर्वजों जाओ मिलान किए गए तत्वों के वर्तमान सेट में, वैकल्पिक रूप से एक चयनकर्ता द्वारा फ़िल्टर किया गया।

माता पिता() (अगले स्तर केवल) मिलान किया तत्वों की वर्तमान सेट में प्रत्येक तत्व की मूल जाओ, वैकल्पिक रूप से एक चयनकर्ता द्वारा फ़िल्टर।

खोज() (सभी स्तर) मिलान किया तत्वों के वर्तमान सेट, एक चयनकर्ता, jQuery वस्तु, या तत्व द्वारा फ़िल्टर में प्रत्येक तत्व के वंशज प्राप्त करें।

+0

शीर्षक को संपादित करने के लिए स्वतंत्र महसूस करें यदि आपको लगता है कि यह भविष्य के पाठकों के लिए प्रश्न के उद्देश्य को स्पष्ट करेगा। –

+0

मैं इसके साथ शांत हूं। यह मैं क्या गुमराह किया। बस इसे भविष्य के संदर्भ के लिए पोस्ट किया गया :) –

+3

यह() निकटतम() के विपरीत होने के संबंध में गलत है। ढूंढें() पेड़ में सभी तत्व पाएंगे। तो निकटतम(), नीचे खोज के विपरीत,() पहले() मिलेगा। –

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