2010-10-21 17 views
5

मैं प्रोटोटाइप से jquery तक एक वेबपैप पोर्ट कर रहा हूं जिसमें मैं अक्सर प्रोटोटाइप डाउन() फ़ंक्शन का उपयोग करता हूं।प्रोटोटाइप के लिए JQuery- समकक्ष डाउन() - फ़ंक्शन

JQuery-api पर glancing (एक दिया तत्व के पहले बच्चे का चयन) तरीके यह करने के लिए में से एक होगा:

प्रोटोटाइप: $ ('एबीसी') नीचे();। jquery: $ ('abc')। बच्चे()। पहला();

हालांकि, चूंकि यह पहले सभी बच्चों को लाता है और एक फ़िल्टर को फिर से लागू करता है, मुझे संदेह है कि यह इस उपयोग-मामले के लिए कुशल है।

बेहतर तरीका क्या है?

उत्तर

6

आप jQuery का विस्तार कर सकते हैं, और इस तरह एक down() समारोह जोड़ें:

(function($) { 
    $.fn.down = function() { 
    return $(this[0] && this[0].children && this[0].children[0]); 
    }; 
})(jQuery); 

इस तरह आप अपने कोड में कुछ भी बदलने की जरूरत नहीं है।

आप यह लाइव jsFiddle example देख सकते हैं।
आप jsPerf में प्रदर्शन तुलना भी देख सकते हैं।
यह दिखाता है कि यह अन्य उत्तरों (जो 40% से 70% धीमी है) में प्रस्तुत विधियों की तुलना में तेज है।

संपादित करें:
वास्तविक प्रोटोटाइप कार्यान्वयन से अनुकूलित एक वैकल्पिक संस्करण। यह (25% से)

(function($) { 
    $.fn.down = function() { 
    var el = this[0] && this[0].firstChild; 
    while (el && el.nodeType != 1) 
     el = el.nextSibling; 
    return $(el); 
    }; 
})(jQuery); 
+0

हाँ, यह अच्छा लग रहा है, thanx –

1

कोशिश:

$('abc').children(":eq(0)") 
+0

हाँ धन्यवाद भी तेजी है।जब मैं इसे देता हूं तो मैं स्वीकार करूंगा (9 मिनट ;-) –

+0

तो ऐसा लगता है कि यह $ ('एबीसी') है। बच्चे (": eq (0)") जो मैंने शुरुआती रूप से उपयोग किया था उससे अलग नहीं है ($ ('फॉर्म') .children()। पहला();)। मुझे उम्मीद थी कि किसी प्रकार का चयनकर्ता है जिसे पहले व्यक्ति को वापस करने से पहले सभी बच्चों को जानने की ज़रूरत नहीं थी .. –

2

के कुछ तरीके हैं आप ऐसा कर सकते हैं।

सबसे पहले, यह एकल तत्व युक्त एक सरणी देता है।

$('form').children().first(); 

यह भी ध्यान रखें इस $('form').children(":eq(0)") की एक अधिक पठनीय संस्करण है,

दूसरा, यह सिर्फ तत्व सरणी से निकाला रिटर्न

$('form').children()[0]; 

या आप जानते हैं कि आपके बाद (बल्कि तत्व प्रकार की परवाह किए बिना सिर्फ पहले बच्चे की तुलना में) तत्व आप किस प्रकार का उपयोग कर सकते हैं:

$("input:first"); 
:
$('form').find("input:first"); 

अंत में, यदि आप सख्ती से अपनी मूल करने के लिए तत्व रिश्तेदार की जरूरत नहीं है, तो आप सिर्फ यह सीधे एक CSS3 के चयनकर्ता का उपयोग करके उपयोग कर सकते हैं

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

+1

प्रदर्शन के संबंध में आप इस जेएसपीआरएफ परीक्षण को अभी देख सकते हैं: http://jsperf.com/jquery-get-first -चिल्ड –

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