2010-02-23 18 views
9

दोनों विधियां produce the same results पर दिखाई देती हैं, लेकिन वास्तव में लोगों को यह समझाने के लिए कठोर दबाव दिया गया है कि दूसरी विधि काम करती है, क्योंकि यह स्पष्ट रूप से नहीं है सामान्यतः ज्ञात।

// Create some data 
var foo = { 'vals':[ {'id':'foo'}, {'id':'bar'} ] }​​​​​​​​​​​​​​​​​; 

// Common Method  
$.each(foo.vals, function(i,o){ 
    alert(this.id); 
}); 

// Alternative (lesser-known?) Method 
$(foo.vals).each(function(i,o){ 
    alert(this.id); 
}); 

स्रोत की जांच करने पर, ये दोनों एक-एक जैसा दिखते हैं। दूसरी विधि इस प्रकार है:

each: function(callback, args) { 
    return jQuery.each(this, callback, args); 
} 

इस विधि प्रमाण्य अधिक सामान्यतः ज्ञात प्रणाली को बुलाती है, जिसका अर्थ यह बस के रूप में वैध है। क्या यह समझ सही है, या क्या मैं यहाँ कुछ याद कर रहा हूँ?

मैंने आम तौर पर इस विधि पर भरोसा किया है क्योंकि इससे मुझे चयनकर्ताओं के संबंध में मानक प्रथाओं से विचलित नहीं किया गया है। क्यों न हम स्वीकार करते हैं, हम प्रशिक्षित कर रहे हैं करने के लिए:

$("p").each(); 

तो यह करने के लिए केवल प्राकृतिक लगता है:

$(obj).each(); 

मैं गलत हूँ?

+0

मुझे नहीं पता कि समस्या क्या है। '$ (ओ)। प्रत्येक()' कॉल 'jQuery.each (यह, कॉलबैक, तर्क)'। आपको और अधिक पुष्टि/विश्वास की आवश्यकता है? – voyager

+0

@ वाहर: मैं बस यह सुनिश्चित करना चाहता हूं कि मेरे पास यह गलत नहीं था। मुझे लगा कि इस तरह की एक वस्तु अन्य jQuery डेवलपर्स के लिए ब्याज की हो सकती है, और कोई भी भेद में थोड़ा सा जोड़ सकता है। – Sampson

+0

काफी मेला। ऐसा लगता है कि अंतर कार्यक्षमता की बजाय शैली के मामले में अधिक है। बेशक, अब आपके पास असुविधाजनक उपयोगकर्ताओं को इंगित करने के लिए कहीं कहीं है। – voyager

उत्तर

12

दोनों के बीच का अंतर वास्तव में घातीय है कि आप इसका उपयोग कैसे कर रहे हैं इस पर निर्भर करता है।

पहला $.each इटरेटर शुरू करने के लिए एकल फ़ंक्शन कॉल का गठन करता है।

दूसरा $(foo.vals).eachतीन फ़ंक्शन कॉल इटेटरेटर शुरू करने के लिए बनाता है। पहला $() है जो एक नया jQuery रैपर सेट बनाता है (सुनिश्चित नहीं है कि इस प्रक्रिया के दौरान कितने अन्य फ़ंक्शन कॉल किए गए हैं)। फिर $().each पर कॉल करें। और अंत में यह इटरेटर शुरू करने के लिए jQuery.each पर आंतरिक कॉल करता है।

आपके उदाहरण में, अंतर कम से कम कहने के लिए नगण्य होगा। हालांकि, एक नेस्टेड उपयोग परिदृश्य में, आप प्रदर्शन को एक मुद्दा बन सकते हैं।

अंत में, jQuery प्रबुद्धता में कोड़ी लिंडले $.each का उपयोग कर 1000 से अधिक समारोह शामिल कॉल की वजह से सिफारिश नहीं करता पुनरावृत्तियों के लिए। सामान्य for(var i = 0... पाश का उपयोग करें।

+0

+1 उत्कृष्ट जानकारी। मैं इस विषय पर सीएल की स्थिति को सुनकर विशेष रूप से खुश था क्योंकि मैंने हाल ही में एक अन्य प्रश्न में '$ (प्रत्येक)' के विकल्प के रूप में '(;;) 'के लिए सुझाव दिया था। मुझे समझ में आता है कि सीएल संभवतः मेरे साथ सहमत हो सकता है;) – Sampson

+0

$ .wach के कारण किसी भी संग्रह पर आपको फिर से चलाने की अनुमति देता है।प्रत्येक 'केवल jquery तत्व के लिए है? –

2

मुझे यकीन नहीं है कि हर कोई क्या कहता है ... लेकिन मैं लगभग पूरी तरह से आपकी दूसरी विधि का उपयोग करता हूं।

.NET भूमि से आ रहा है ... यह सिर्फ मुझे और अधिक समझ में आता है और चीजों को पढ़ने में आसान बनाता है।

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