如何在$.each循环中累加结果?

3

你好,我正在尝试读取topmenu元素中每个项目的宽度,并将项目的宽度相加并赋值给一个变量。但是,当我运行这段代码时,在提示框中显示NaN。 请问这段代码有什么问题:

$(document).ready(function(){
    $('.topmenu').each(function(menu){
        var btext = $(this).find('.baritem').width();
        alert(btext);
        var itemswidth = +itemswidth+btext;
        alert(itemswidth);
        //var width = getTextWidth(btext,"arial","40");
        //alert(width);     
    });
});

你能展示一下 HTML 代码吗? - PSR
3
undefined + number == NaN的意思是“未定义加上一个数等于非数值”。 - elclanrs
2个回答

11

这一行

var itemswidth = +itemswidth+btext;

undefined添加到数字中,会得到NaN。在进入循环之前,您需要将itemswidth初始化为0

$(document).ready(function(){
  var itemswidth = 0;
  $('.topmenu').each(function(){
     var btext = $(this).find('.baritem').width();
     itemswidth += btext;
     console.log(itemswidth); // better than alert
  });
});

给Florian的话:
$(document).ready(function(){
    var itemswidth = $('.topmenu .baritem').get().reduce(function(t,e){ 
        return t+$(e).width()
    }, 0);
    console.log(itemswidth);
});

@FlorianMargaine 现在满意了吗? - Denys Séguret

0

你可以轻松地使用以下方法:

var reduce=Array.prototype.reduce;
var completeWidth=reduce.call($("div"), function(sum, elem){
    sum+=$(elem).width();
    return sum;
}, 0);

http://jsfiddle.net/DSUHG/


1
提及浏览器兼容性会更好 :-) 跟随原始示例会更好。 - Florian Margaine

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接