2010-03-24 25 views
32

कोई चयनकर्ता द्वारा फ़िल्टर किए गए वर्तमान मिलान किए गए सेट के वंशज/पूर्वजों को प्राप्त करने के लिए matchedset.find(selector)/matchedset.parents(selector) का उपयोग कर सकते हैं, लेकिन इसमें मिलान किए गए सेट को स्वयं शामिल नहीं किया जाता है (यदि ऐसा होता है चयनकर्ता से भी मिलें)। वहाँ सेJquery: पूर्वजों (या वंशज) प्राप्त करें और स्वयं

matchedset.find(selector).add(matchedset.filter(selector)) 

इसे पाने के लिए एक बेहतर (अधिक संक्षिप्त और/या तेज) जिस तरह से और माता पिता के लिए संबंधित() है?

उत्तर

42

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

matchedset.find('*').andSelf().filter(selector); 

माता-पिता के लिए:

matchedset.parents('*').andSelf().filter(selector); 
+0

कौन सा बेहतर है नहीं ले करता है? '.ind ('*')' या '.contents() 'जैसे: http://stackoverflow.com/questions/364791/jquery-select-descendants- शामिल-the- parent – Joe

+10

शायद यह ध्यान रखना एक अच्छा विचार है कि और स्वयं को अब हटा दिया गया है और इसे एडबैक() के साथ बदल दिया गया है जो एक चयनकर्ता को भी स्वीकार करता है। http://api.jquery.com/addBack/ –

0

"और स्वयं()" फ़ंक्शन देखें।

+2

andSelf() एक चयनकर्ता – gsakkis

17

मुझे लगता है कि अपने विधि निष्पादन समय के संदर्भ में कुशल है, लेकिन क्या आप शायद के लिए पूछ रहे हैं वाक्यात्मक चीनी है। उसके लिए, आप इसे एक प्लगइन में लपेट कर सकते हैं:

jQuery.fn.findAndSelf = function(selector) { 
    return this.find(selector).add(this.filter(selector)) 
    } 

तो इस तरह इसका इस्तेमाल:

$('.whatever').findAndSelf('.awesome') 

आप कल्पना प्राप्त करने के लिए आपको लगता है कि न केवल ढूंढने के लिए काम करता है एक प्लगइन बना सकते हैं चाहता है तो लेकिन माता-पिता और 'बच्चों' और अन्य चयनकर्ता आधारित प्लगइन्स:

jQuery.fn.withSelf = function(plugin, selector) { 
    return this[plugin](selector).add(this.filter(selector)) 
    } 

तो फिर तुम आप प्लगइन पहले तर्क के रूप में की आपूर्ति होगी ट्रेवर्सल कॉल करना चाहते हैं:

$('.whatever').withSelf('find', '.awesome') 
$('.whatever').withSelf('parents', '.awesome') 
बस किक के लिए

, आप सभी को एक बार ट्रेवर्सल plugins की एक मनमाना संख्या फोन की सुविधा देता है कि एक और मजेदार प्लगइन:

jQuery.fn.traverse = function(plugins, selector) { 
    var set = new jQuery(); 
    $.each(plugins, function(i, val) { 
     set.add(this[val](selector)); 
    } 
    return set 
    } 

आप चयनकर्ता आधारित प्लगइन्स के किसी भी संयोजन के साथ इस एक आह्वान सकता है, इस प्रकार :

$('.whatever').traverse(['find','filter'], '.awesome') 
$('.whatever').traverse(['parents','find'], '.awesome') 
$('.whatever').traverse(['parents', 'filter'], '.awesome') 
2

जबकि Jeoff के समाधान अच्छा है, कभी कभी यह सभी तत्वों को दोहराने में, एक चयनकर्ता के बिना ही सहित सक्षम होने के लिए अच्छा है। इस ऐड-ऑन में थोड़ा और अधिक लचीला है:

$.fn.all = function(selector) { 
    if(selector===window.undefined) return this.find('*').andSelf(); 
    return this.filter(selector).add(this.find(selector)); 
}; 
0

माता-पिता के लिए आप closest(selector)