jQuery

2008-10-14 5 views
13

में निकटतम पूर्वजों नोड में मेरे जावास्क्रिप्ट अनुभव में, मैंने पाया कि यह एक बहुत ही आम कार्य है "किसी शर्त के साथ निकटतम पूर्वजों को खोजना (टैग नाम, कक्षा, ...)"। क्या माता-पिता() jquery की विधि नौकरी कर सकती है? माता-पिता() के लौटे तत्वों का आदेश अनुमानित है? ऊपर से नीचे या नीचे से ऊपर है? पल मैं इस उपयोगिता फ़ंक्शन का उपयोग के लिए:jQuery

function ancestor(elem, selector) { 
    var $elem = $(elem).parent(); 
    while($elem.size() > 0) { 
    if($elem.is(selector)) 
    return $elem; 
    else 
     $elem = $elem.parent(); 
    } 
    return null; 
} 

कोई मुझे बता सकते हैं काम करने के लिए एक चतुर तरीका उपलब्ध है?

उत्तर

20

संपादित करें: jQuery 1.3 के बाद से, इसे closest() फ़ंक्शन के रूप में बनाया गया है। उदाहरण: $('#foo').closest('.bar');


हाँ - माता-पिता() पेड़ को पार करते हैं।

<div id="a"> 
    <div id="b"> 
     <p id="c"> 
      <a id="d"></a> 
     </p> 
    </div> 
</div> 

$('#d').parents("div:first"); div b का चयन करेगा।

+2

खबरदार, जॉन Resig करने की योजना स्रोत क्रम में तत्वों को वापस करने के लिए .parents() बदलें। वापस लौटे संग्रह के अंदर तत्व ऑर्डर के चारों ओर घूमने वाले फ़ोरम थ्रेड के बाद जॉन द्वारा दायर इस बग को देखें: http://bugs.jquery.com/ticket/5994 –

+4

सौभाग्य से jQuery टीम ने इस टिकट को 'wontfix' के साथ बंद कर दिया है। तो। माता-पिता() को फिर से स्थिर माना जाना चाहिए। –

16

@nickf के जवाब देने के लिए जोड़ा जा रहा है:

jQuery 1.3 closest साथ इस कार्य को simplifyed।

<div id="a"> 
    <div id="b"> 
     <p id="c"> 
      <a id="d"></a> 
     </p> 
    </div> 
</div> 

आप कर सकते हैं::

एक डोम को देखते हुए

$('#d').closest("div"); // returns [ div#b ] 

[Closest रिटर्न एक] निकटतम माता पिता तत्व यह है कि निर्दिष्ट चयनकर्ता से मेल खाता युक्त तत्वों के सेट, प्रारंभिक तत्व शामिल है।

+0

.closest() के साथ समस्या यह है कि यह वर्तमान तत्व से शुरू होता है। [JQuery साइट] से (http://api.jquery.com/closest/): "पहला तत्व प्राप्त करें जो चयनकर्ता से मेल खाता है, वर्तमान तत्व से शुरू होता है और डीओएम पेड़ के माध्यम से प्रगति करता है।"आम तौर पर, यह प्रश्न का सही उत्तर नहीं देगा क्योंकि यह केवल पूर्वजों के तत्वों की तलाश में है। –

3

आप closest उपयोग करें, क्योंकि parents आप परिणाम आप उम्मीद यदि आप कई तत्वों के साथ काम कर रहे हैं नहीं देंगे चाहिए। उदाहरण के लिए, मान लीजिए कि आप इस डालते हैं:

<div id="0"> 
     <div id="1">test with <b>nested</b> divs.</div> 
     <div id="2">another div.</div> 
     <div id="3">yet <b>another</b> div.</div> 
    </div> 

और आप divs उनके तत्काल बच्चे के रूप में एक <b> तत्व है कि एक वर्ग जोड़ना चाहते हैं (यानी, 1 और 3)। यदि आप $('b').parents('div') का उपयोग करते हैं, तो आपको 0, 1 और 3 div प्राप्त होते हैं। यदि आप $('b').parents('div:first') का उपयोग करते हैं, तो आपको केवल div 1 प्राप्त होता है। 1 और 3 प्राप्त करने के लिए, लेकिन 0 नहीं, आपको $('b').closest(elem) का उपयोग करना होगा।

+0

.closest() के साथ समस्या यह है कि यह वर्तमान तत्व से शुरू होता है। [JQuery साइट] से (http: // api .jquery.com/निकटतम /): "पहला तत्व प्राप्त करें जो चयनकर्ता से मेल खाता है, वर्तमान तत्व से शुरू होता है और डीओएम पेड़ के माध्यम से प्रगति करता है।" आम तौर पर, यह सही ढंग से प्रश्न का उत्तर नहीं देगा क्योंकि यह पूर्वजों की तलाश में है तत्व केवल –

3

निकटतम(), वर्तमान तत्व पर शुरू होता है, तो माता-पिता आप देख रहे हैं वर्तमान (जैसे। दोनों divs कर रहे हैं), उपयोग माता पिता() के रूप में ही टैग है। निकटतम()