在同一个类中添加值并返回总和

时间:2014-06-20 04:27:52

标签: javascript jquery html

你好,这里的人是我的代码......

var total = 0;
var find_total;
 function total_val(find_total){

$(find_total).each(function() {
    total += parseInt($(this).text());
    return total;
});

  }

我叫这个函数......

$('#total_price').val(total_val('.price'));

#total_price.price不断变化为different div ids and class ... return total;不起作用,有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

您正在返回.each()函数内的总值,当我们期望函数total_val()中的值时,它不会返回任何内容,

尝试,

function total_val(find_total){ 
   var total = 0; //remove the global variable total and use this.
   $(find_total).each(function() {
    total += parseInt($(this).text());
   });
   return total;
}

或者您可以使用.reduce()简化代码。

function total_val(find_total){ 
   return $(find_total).map(function() {
   return parseInt($(this).text());
   }).get().reduce(function(a,b){
   return a+b;
   });
}

更简单,

function total_val(find_total){ 
   return $(find_total).get().reduce(function(a,b){
      return a+ parseInt($(b).text(),10);
   },0);
}

答案 1 :(得分:0)

Here's a fiddle showing you a couple ways you can do this

这可以很好地为你工作

function total(jq, callback) {
  return jq.get().reduce(function (sum, elem) {
    return sum + window.parseInt(callback(elem), 10);
  }, 0);
}

然后像这样使用它

total($(".price"), function(elem) {
  return $(elem).text();
});

我认为这种方法更好,因为它可以为您提供total的元素类型的灵活性。

例如,如果您尝试总计<input>个元素,则需要使用

total($("input"), function(elem) {
  return $(elem).val();
});

更好的是,将它变成像这样的轻量级jQuery插件

(function(window, $) {
  function total(jq, callback) {
    // code from above
  }

  $.fn.total = function(callback) {
    return total(this, callback);
  };
})(window, jQuery);

现在你可以像这样使用它了

$(".price").total(function(elem) {
  return $(elem).text();
});