2009-08-31 17 views
10

के लिए मैं $ .प्रत्येक उपयोग कर रहे हैं अब थोड़ी देर के लिए पुनरावृत्तियों करने के लिए के साथ है, लेकिन मैं सुनवाई लोगों देशी जे एस छोरों करने के लिए उपयोग करने के लिए कहते हैं पर रहते हैं। मैं प्रदर्शन के बारे में बहुत चिंतित हूं लेकिन मुझे यकीन नहीं है कि सार्थक तरीके से $ .each को प्रतिस्थापित करना हमेशा संभव है।jQuery प्रत्येक जगह

तो मेरे सवालों का, कर रहे हैं यह संभव है हमेशा के लिए साथ $ .प्रत्येक को बदलने के लिए, और अगर जब नहीं क्या जब यह किया जा सकता है के लिए अंगूठे का नियम है और यह नहीं कर सकता।

मैं एक इस तरह प्रत्येक है:

$this.find("div.class").each(function(){ 
    var $thisparent = $(this).parent(); 

    if (condition) {   
    $(this).prepend($thisparent.text()); 
    } 

    if (condition2) {   
    $(this).prepend($thisparent.text()); 
    } 

}); 

उत्तर

9

यह jQuery .each साथ क्या करता है है, मूल रूप से:

$.fn.each = function(callback) { 
    var i, length = this.length; 
    for(i = 0; i < length; ++i) { 
     callback.call(this[i]); 
    } 
}; 

इसलिए callback.call कॉल के साथ अपने अज्ञात फ़ंक्शन की 'सामग्री' को प्रतिस्थापित करना मुश्किल नहीं है। बस jQuery ऑब्जेक्ट के साथ अस्थायी के साथ this को प्रतिस्थापित करना सुनिश्चित करें।

अपने आपूर्ति कोड परिवर्तित: एक अस्थायी में

var foo = $this.find("div.class"), 
    fooLength = foo.length, 
    i, 
    $thisparent; 

for (i = 0; i < fooLength; ++i) { 
    $thisparent = $(foo[i]).parent(); 

    if (condition) {   
     $(foo[i]).prepend($thisparent.text()); 
    } 

    if (condition2) {   
     $(foo[i]).prepend($thisparent.text()); 
    } 
} 

अतिरिक्त (संभावित) गति के लिए, कैश foo[i]। भी, और आवश्यकता होने पर केवल $thisparent असाइन करें। यदि condition और condition2 पारस्परिक रूप से अनन्य हैं, तो एक if (condition || condition2) का उपयोग करें।

+0

बहुत बहुत धन्यवाद, लेकिन क्या आप एक उदाहरण प्रदान कर सकते हैं? धन्यवाद। – Mark

+0

आपको बहुत धन्यवाद, :) महान जवाब और मेरी समझ बढ़ाने के लिए धन्यवाद। क्या आप एक एकल का उपयोग कैसे कर सकते हैं? इसके अलावा अगर मेरे पास आधा दर्जन परस्पर अनन्य स्थितियां हैं। – Mark

+0

@ मार्क, पर पढ़ें || ऑपरेटर (https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Operators/Logical_Operators)। – strager

5

किसी for और $.each के प्रदर्शन की तुलना में:

http://jquery-howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html

+0

तो जाहिर है कि आप केवल बड़े सरणी के साथ एक महत्वपूर्ण प्रदर्शन हिट करते हैं। जानकार अच्छा लगा। – Joel

+1

मुझे लगता है कि इसके पीछे कारण फ़ंक्शन कॉल का ओवरहेड है, क्योंकि jQuery का 'प्रत्येक' कोड इतना भारी नहीं है। – strager

+2

फिर इसके बारे में क्या: http://www.youtube.com/watch?v=mHtdZgou0qU#t=24m00s – Mark

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