将.each()转换为for循环jQuery

时间:2014-06-16 15:39:22

标签: jquery

当前函数需要很长时间才能循环并影响应用程序的性能。有人可以帮助我将each()函数转换为for循环吗?感谢

  $('.scrollable tr:last').find('input[name="resource_week_value[]"]').each(function() {
        var pos = $(this).closest('td').prevAll().length;
        var tot = 0;
        var that = this;
        var temp = $(this).closest('tr').prevAll().find('td:eq(' + pos + ')').find('input[name="resource_week_value[]"]').each(function() {
            tot += +$(this).val();
            $(that).val(tot);
        });
    }); 

3 个答案:

答案 0 :(得分:0)

不会这样做吗?

$('input[name="resource_week_value[]"]').each(function() {
        var pos = $(this).closest('td').prevAll().length;
        var tot = 0;
        var that = this;
        var temp = $(this).closest('tr').prevAll().find('td:eq(' + pos + ')').find('input[name="resource_week_value[]"]').each(function() {
            tot += +$(this).val();
    });
}); 

答案 1 :(得分:0)

如果没有您的标记,很难说出您的代码在做什么,但以下猜测可能会帮助您找到更好的方法来重新编写代码:

$('.scrollable tr').last().find('tr').each(function(i, v) {
    var that = $(this),
        tot = that.find('td').map(function(k,l){ return 0; }).get();
    that.prevAll().each(j,u) {
        tot = $(this).find('td').map(function(k,l) { 
            return +$(l).find('input[name="resource_week_value[]"]').val() + tot[k];
        }).get();
    });
    that.find('td').each(function(j,u) {
        $(u).find('input[name="resource_week_value[]"]').val( tot[ j ] );
    });
}); 

答案 2 :(得分:0)

正如我在评论中提到的,你做错了两件事:

1)您经常使用find()查询DOM树。而是使用适当的CSS选择器

2)在$ .each()循环中

  var temp = $(this).closest('tr').prevAll().find('td:eq(' + pos +  ')').find('input[name="resource_week_value[]"]').each(function() {
                tot += +$(this).val();
                $(that).val(tot);
            });

您经常更新input的值,这不是必需的。在每个循环中,每次使用$(that).val(tot);时,DOM树都会受到影响。

tot分配给变量时,在each()循环之外,放置$(this).val(tot),这将以有效的方式为您提供相同的结果。

3)这不是性能改进,而是代码错误:

您正在使用tot += +$(this).val();

但它应该在循环中tot += $(this).val();