استبدال jQuery لكل منها
-
20-09-2019 - |
سؤال
لقد كنت أستخدم $. 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)
.
نصائح أخرى
شخص ما قارن أداء for
و $.each
:
http://jquery-howto.blogspot.com/2009/06/javascript-for-loop-vs-jquery-each.html