jQuery .text()返回NaN,为什么会这样?

时间:2013-03-19 19:45:12

标签: javascript jquery

$('span#pricetotal').text(function() {
    var val = 0;
    for (var i = 0; i < 15; i++) {
        val += parseInt($('span#itemtotal_' + i).text());
    };
    return val;
});

我有15x <span>我用jQuery text()函数定价。在上面的代码中,我想计算它们的总和并将其放入span#pricetotal

但是,该元素显示(20+20=40),而不是添加2020。在上面的代码中,我使用了parseInt - 这会返回NaN

我做错了什么?谢谢。

编辑:元素的HTML如下所示:

<span id="itemtotal_0">16</span>

3 个答案:

答案 0 :(得分:2)

$('#pricetotal').text(function() {
    var val = 0;
    for (var i = 0; i < 14; i++) {        
        var value = $.trim($('span#itemtotal_' + i).text());
        val +=parseInt( $.isNumeric(value) ? value : 0);
    };
    return val;
});

DEMO

注意:

如果您的范围包含任何spacenon-numeric数据,这是安全的。在演示中,您会发现一个span有一个字母a

答案 1 :(得分:0)

使用条件检查..

试试这个

$('span#pricetotal').text(function() {
  var val = 0;
   for (var i = 0; i < 15; i++) {
      if($('span#itemtotal_' + i).text() != ""){  // <-- check if not empty since empty gives Nan when used pareseInt
        val += parseInt($('span#itemtotal_' + i).text());

      }
   };
 return val;
});

OR

for (var i = 0; i < 15; i++) {
    val += parseInt($('span#itemtotal_' + i).text()) || 0;
 }

答案 2 :(得分:0)

完美无缺: http://jsfiddle.net/jDnVy/5/

$('span#pricetotal').text(function() {
    var val = 0;
    for (var i = 0; i < 15; i++) {        
        val +=parseInt($('span#itemtotal_' + i).text());

    };
    return val;
});

请检查您的商品总计跨度是否以itemtotal_0开头,而不是itemtotal_1

可能会尝试查找span#itemtotal_0,但它不存在。请仔细检查。