2012-02-15 21 views
17

Próbuję pobrać sumę wszystkich wartości w td na podstawie określonej klasy. Kod nie generuje żadnych błędów, ale moja suma daje wynik "0".suma wszystkich wartości dla kolumny tabeli na podstawie klasy

Czy wartości liczbowe muszą być określone w określony sposób? Widziałem tutaj inne odpowiedzi na temat SO, z których naśladowałem kod, i nie widzę żadnej prawdziwej różnicy między moim a ich, więc jestem zdezorientowany, dlaczego moje nie działa.

Oto samouczek i następnie na odniesienie: http://viralpatel.net/blogs/2009/07/sum-html-textbox-values-using-jquery-javascript.html

Oto mój javascript

$(document).ready(function(){ 
$('.price').each(function() { 
    calculateSum(); 
}); 
}); 

function calculateSum() { 

var sum = 0; 
//iterate through each td based on class and add the values 
    $(".price").each(function() { 

     //add only if the value is number 
     if(!isNaN(this.value) && this.value.length!=0) { 
      sum += parseFloat(this.value); 
     } 

    }); 
$('#result').text(sum);  
}; 

Oto mój html

<table border="1"> 
<tr> 
<th>Item</th> 
<th>Price</th> 
</tr> 
<tr> 
<td>Banana</td> 
<td class ="price">50</td> 
</tr> 
<tr> 
<td>Apple</td> 
<td class ="price">100</td> 
</tr> 
</table> 

<div id="result"></div> 

Odpowiedz

34

Chcesz użyć text() zamiast this.value (od <td> s nie mają "wartości"):

var sum = 0; 
// iterate through each td based on class and add the values 
$(".price").each(function() { 

    var value = $(this).text(); 
    // add only if the value is number 
    if(!isNaN(value) && value.length != 0) { 
     sum += parseFloat(value); 
    } 
}); 

Co więcej, zapętlasz swoje elementy .price (wywołując calculateSum) wiele razy. Można zastąpić

$(document).ready(function(){ 
    $('.price').each(function() { 
     calculateSum(); 
    }); 
}); 

z

$(calculateSum); 
+0

To było wspaniałe dzięki. Nie wiedziałem, że możesz skrócić kod pętli nad elementami w sposób, który opisujesz. to było bardzo przydatne. dzięki –

+0

Cóż, nie skróciłem kodu, który był w pętli. Zapętliłeś się dwa razy; jeden w twojej procedurze 'onload' i ponownie w samej funkcji' calculateSum() '. Usunąłem ten pierwszy. Zrobiłem skrót do definicji programu 'ready'. –

+0

pomógł mi, dzięki Rob – StreetCoder

3

Mam plugin jQuery Sumtr, który obsługuje to całkiem dobrze, jeśli chcesz wiersz podsumowania.

Oto Twoja example z wtyczką.

+0

To jest naprawdę miłe. Szkoda, że ​​wcześniej nie widziałem tej biblioteki. Zaoszczędziłoby mi to trochę czasu. Dziękuję za odpowiedź. Będę miał na to oko, by móc z niego skorzystać w przyszłości. –

+2

Właśnie go utworzyłem wczoraj. :-) – Larsenal

+1

działa to świetnie, obsługuje również wiele kolumn, co jest dokładnie tym, czego szukałem. Wielkie dzięki! – hanzolo

Powiązane problemy