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);     
    });
});
4

2 回答 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
  });
});

对于弗洛里安:

$(document).ready(function(){
    var itemswidth = $('.topmenu .baritem').get().reduce(function(t,e){ 
        return t+$(e).width()
    }, 0);
    console.log(itemswidth);
});
于 2013-05-23T07:13:01.357 回答
0

您可以通过以下方式轻松完成:

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

http://jsfiddle.net/DSUHG/

于 2013-05-23T07:26:10.647 回答