2014-02-05 5 views
0

Как я могу переписать этот код более DRY? Я просто адаптировал это и расширил его, но, очевидно, был бы более простой способ написать это. Просто не знаете, как это сделать?Лучший способ написать этот jQuery

incomeSum(); 
expenseSum(); 
debtSum(); 
savingsSum(); 
billsSum(); 

function incomeSum() { 
    var sum=0; 
    //iterate through each input and add to sum 
    $('#income .amount').each(function() {  
      sum += parseInt($(this).text());      
    }); 
    //change value of total 
    $('#income .total').html('$'+sum); 
} 
function expenseSum() { 
    var sum=0; 
    //iterate through each input and add to sum 
    $('#expense .amount').each(function() {  
      sum += parseInt($(this).text());      
    }); 
    //change value of total 
    $('#expense .total').html('$'+sum); 
} 

etc etc .... 
+0

я не знаю, но мне кажется немного откусил спросить так переписывания ваш Jquery дважды , Возможно, что-то в google раньше и попробуйте вещи – JochemQuery

ответ

0
function awesomeSum(id) { 
    var sum=0; 
    $(id).find('.amount').each(function() {  
      sum += parseInt($(this).text());      
    }); 
    //change value of total 
    $(id).find('.total').html('$'+sum); 
} 

И потом:

$.each(['#income', '#expense', '#debt', '#bills'], function(){ 

    awesomeSum(this); 

}); 
2

Один из способов поставить селекторы в качестве аргументов функции:

function sum(inputSelector, outputSelector) { 
    var sum=0; 
    //iterate through each input and add to sum 
    $(inputSelector).each(function() {  
      sum += parseInt($(this).text());      
    }); 
    //change value of total 
    $(ouputSelector).html('$'+sum); 
} 

Использование

sum("#expense .amount", "#expense .total"); 

Другой способ передать объекты JQuery в качестве аргументов:

function sum($inputs, $output) { 
    var sum=0; 
    //iterate through each input and add to sum 
    $inputs.each(function() {  
      sum += parseInt($(this).text());      
    }); 
    //change value of total 
    $output.html('$'+sum); 
} 

Usage

sum($('#expense .amount'), $('#expense .total')); 
+0

+1 для предоставления ряда опций (tho я предпочитаю второй лично)! 1 :-) –

Смежные вопросы