سؤال

لقد كنت أستخدم $. EACH للقيام بالتكرارات لفترة من الوقت الآن ، لكنني أستمر في سماع الأشخاص الذين يقولون لاستخدام JS الأصليين للقيام بحلقات. أنا قلق للغاية بشأن الأداء ، لكنني لست متأكدًا مما إذا كان من الممكن دائمًا استبدال $.

لذا فإن أسئلتي هي ، هل من الممكن استبدال $ دائمًا.

لدي كل مثل هذا:

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

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

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

 });
هل كانت مفيدة؟

المحلول

هذا ما يفعله jQuery مع .each, في الأساس:

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

لذلك ليس من الصعب استبدال "محتويات" وظيفتك المجهولة مع callback.call يتصل. فقط تأكد من استبدال this مع مؤقت مع كائن jQuery.

تحويل الكود الموفر:

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).

نصائح أخرى

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top