重构我的coffeescript代码以获得特定列值的总和

时间:2014-09-20 16:16:02

标签: javascript jquery ruby-on-rails coffeescript

这可能是一个菜鸟问题,但我是coffeescript和javascript的新手,我试图弄清楚如何重构下面的代码来获取两个具有不同类名的列的值的总和并显示在我的html页面是我到目前为止的代码:



totalItems = ->
  column= $("#websiteTable td[class=website_count]")
  theTotal = 0
  column.each ->
    value = $(this).html()
    theTotal += parseInt(value)
    return
  alert(theTotal)

newItems = ->
  column= $("#websiteTable td[class=new_count]")
  theTotal = 0
  column.each ->
    value = $(this).html()
    theTotal += parseInt(value)
    return
  alert(theTotal)




你可以看到有很多重复的代码我怎么能有效地重写它?

由于

1 个答案:

答案 0 :(得分:3)

创建一个以jQuery选择器作为参数的函数。

calculateTotal = (element, total = 0) ->
    element.each ->
        value = $(@).html()
        total += +value

    total

然后你可以这样做:

totalItems = calculateTotal $ "#websiteTable td[class=website_count]"
newItems = calculateTotal $ "#websiteTable td[class=new_count]"

请参阅下面的实例。



var calculateTotal;

calculateTotal = function(element, total) {
  if (total == null) {
    total = 0;
  }
  element.each(function() {
    var value;
    value = $(this).html();
    return total += +value;
  });
  
  return total;
};

$('button').on('click', function(){
	alert(calculateTotal($('ul li')));
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<ul>
	<li>2</li>
  	<li>4</li>
</ul>

<button>Calculate the total</button>
&#13;
&#13;
&#13;