2012-11-19 11 views
6

[संपादित करें] मैंने प्रश्न का खुलासा किया है और उदाहरण को हटा दिया है, क्योंकि यह आपको भ्रमित करता है। तकलीफ देने के लिए माफ़ी।jQuery चयनकर्ताओं के साथ पहले मिलान वाले पदानुक्रमिक वंशज से मिलान करें

मुझे पहले वंशज से मिलान करने की आवश्यकता है जो चयनकर्ता से मेल खाता है।

यदि एकाधिक तत्व इस चयनकर्ता से मेल खाते हैं लेकिन पेड़ों को अलग करते हैं (यानी यदि कोई दूसरे के माता-पिता नहीं है) तो मैं उन दोनों को चुनना चाहता हूं।

सटीक डीओएम संरचना ज्ञात नहीं है, इसलिए मैं .children() या > चयनकर्ता जैसे कार्यों का उपयोग नहीं कर सकता (क्योंकि वे उपयोगकर्ता को वास्तविक डीओएम संरचना के बारे में सुनिश्चित करने की उम्मीद करते हैं)।

मुझे वास्तव में .closest() फ़ंक्शन की तरह दिखने की ज़रूरत है, लेकिन माता-पिता के बजाय बच्चों से मिलान करने और संभावित रूप से कई बच्चों को एक बार में देखने के लिए।

+1

:

jQuery('#parent').closestDescendant(".selector", true) 

यहाँ आप उस समारोह का एक डेमो पा सकते हैं:

प्लगइन लोड हो रहा है या आप स्रोत कोड में जोड़ने से आप साधारण इस तरह से यह कह सकते हैं के बाद , निश्चित रूप से '$ ('# बी')। खोजें ('# सी') 'काम करेगा? – BoltClock

+0

@ बोल्टक्लॉक। लेकिन एचआर ने लिखा कि वह नहीं कर सका, और मैंने सोचा कि आप jQuery और सीएसएस मास्टर हैं, आपको 'id' चयनकर्ता के लिए 'ढूंढ' क्यों चाहिए ?! – gdoron

+0

@gdoron: मैं बस इसे अपने '.find (' ... ')' उदाहरण पर आधारित कर रहा हूं। उन्होंने यह भी नहीं कहा कि वास्तविक कोड में '# बी' और' # सी' * मौजूद नहीं हैं, इसलिए मैं मान रहा हूं कि वे मौजूद हैं, और उस पर कुछ फेंक रहे हैं। आदर्श रूप से हाँ आप केवल '$ (' # सी ') 'का उपयोग करने में सक्षम होंगे ... लेकिन मुझे लगता है कि मैं वास्तव में समझ नहीं पा रहा हूं कि ओपी के वास्तविक कोड में क्या हो रहा है। – BoltClock

उत्तर

1

#B से शुरू होने वाले प्रत्येक पेड़ को .children() द्वारा परिभाषित किया गया है; प्रत्येक पहले .foo इस तरह के एक वृक्ष के भीतर .find('.foo:eq(0)') है, तो आप इस का उपयोग करने में सक्षम होना चाहिए:,

$('#B').children(':not(.foo)').andSelf().find('.foo:eq(0)'); 
+0

मेरे अपने कोड में एक '.foo' है, लेकिन मैं सोच रहा हूं कि प्रत्येक' .foo 'प्रथम-बच्चे से मिलान करने का कोई तरीका है, जैसे [this] (http://jsfiddle.net/7gfFP/2 /) उदाहरण (सीसीसी और जीजीजी को हाइलाइट किया जाना चाहिए)। –

+0

आपका नया समाधान ('$ ('# बी')। बच्चों()। ढूंढें ('। Foo: eq (0)'); ') काम कर रहा है (दूसरा नहीं, क्योंकि बच्चे चयनकर्ता एकाधिक इम्ब्रिकेशन स्तर को रोकता है) । हालांकि, मुझे यह समझने की ज़रूरत नहीं है कि क्यों '.find ('। Foo: eq (0) ')' वही चीज़ वापस नहीं कर रहा है जो '.find ('। Foo ')। Eq (0) '। –

+0

ठीक है, मुझे लगता है, वास्तव में यह काम नहीं कर रहा है (लेकिन यह लगभग है!)। यह पहले बच्चे '.foo' ([इस उदाहरण में] (http://jsfiddle.net/7gfFP/4/) से मेल नहीं खा सकता है, बीबीबी को भी हाइलाइट किया जाना चाहिए)। –

0

आप jQuery प्लगइन closestDescendant

कि एक चौड़ाई पहले खोज implemenst इस्तेमाल कर सकते हैं इसकी जाँच करता है ताकि के सभी बच्चों वर्तमान तत्व के लिए यह अगले स्तर तक चला जाता है। आप अद्वितीय आईडी गारंटी ले सकते हैं, तो demo closestDescendant

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