当前函数需要很长时间才能循环并影响应用程序的性能。有人可以帮助我将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);
});
});
答案 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();