2016-02-05 6 views
6

Ho una tabella generata sul mio JSP che contiene dati per le transazioni: ogni singola transazione è una riga, e c'è una colonna per categoria, quantità, tipo e descrizione.Come riassumere una singola colonna della tabella usando Javascript?

<table class="table table-striped" id="res"> 
     <tr> 
      <th>Category</th> 
      <th>Amount</th> 
      <th>Type</th> 
      <th>Description</th> 
     </tr> 
     <c:forEach var="element" items="${sessionScope.pick}"> 
      <tr> 
       <td><c:out value="${element.category}" /></td> 
       <td class="countable"> 
        <fmt:formatNumber type="currency" currencyCode="USD" 
        value="${element.amount}"></fmt:formatNumber> 
       </td> 
       <td><c:out value="${element.entry_Type}" /></td> 
       <td><c:out value="${element.description}" /></td> 
      </tr> 
     </c:forEach> 
    </table> 

così viene fuori come

Category____Amount____Type____Description

Il mio tavolo è popolata utilizza Struts: seleziono un reparto su un altro JSP, quindi premere il tasto "Display" per inoltrare alla pagina che genera la tabella . Per questo motivo, la tabella non avrà necessariamente un numero di righe impostato. Quello che sto cercando di fare è sommare la colonna Amount da ogni transazione in modo da poter visualizzare il totale. Ho provato a fare questo utilizzando Javascript, ma non ha funzionato per me:

<script src="http://code.jquery.com/jquery-2.1.4.min.js"> 

    var cls = document.getElementById("res").getElementsByTagName("td"); 
    var sum = 0; 
    for (var i = 0; i < cls.length; i++){ 
     if(tds[i].className == "countable"){ 
      sum += isNaN(cls[i].innerHTML) ? 0 : parseInt(cls[i].innerHTML); 
     } 
    } 
    document.getElementById("res").innerHTML.append("<tr><td> Total Balance </td><td>" + sum + "</td><td></td><td></td></tr>"); 
</script> 

chiunque può vedere dove ho incasinato, o quello che una soluzione migliore potrebbe essere? Inoltre, c'è un modo per sommare le colonne e visualizzare il totale senza aggiungere un'altra riga alla tabella? Sarebbe l'ideale se possibile.

+1

Nessun punto di farlo utilizzando JavaScript, ma in jsp è possibile utilizzare un semplice contatore. –

+0

Forse intendevi qualcosa di simile ' $ {} total.value ' – Spuds

risposta

2

La variabile tds deve essere denominata cls. Ecco un esempio funzionante.

https://jsfiddle.net/34wf5gzs/

for (var i = 0; i < cls.length; i++){ 
    if(cls[i].className == "countable"){ 
     sum += isNaN(cls[i].innerHTML) ? 0 : parseInt(cls[i].innerHTML); 
    } 
} 

Roman C is right though. È meglio riassumere questo utilizzando un framework JS o utilizzando un contatore in JSP. Gli script personalizzati richiedono alcuni sforzi per mantenere.

+0

Non riesco a credere di aver perso quel nome variabile .. Grazie per l'esempio, tuttavia, se provo ad aggiungerlo al tavolo, viene fuori vuoto. C'è qualcos'altro che mi manca qui? – Spuds

+0

'innerHTML' è di tipo testo e non ha un metodo di aggiunta. È necessario sostituire il testo. Ho un esempio aggiornato per te - https://jsfiddle.net/34wf5gzs/1/ –

+0

Quando provo a eseguire il tuo esempio, la somma arriva a zero. Non sono stato in grado di capire perché sta accadendo. – Spuds

2

Non ho conoscenza di JSP ma presumo che Roman C abbia ragione.

Ma se si wan't di risolvere questo con javascript qui è un esempio di lavoro:

var sum = 0; 
var table = document.getElementById("res"); 
var ths = table.getElementsByTagName('th'); 
var tds = table.getElementsByClassName('countable'); 
for(var i=0;i<tds.length;i++){ 
    sum += isNaN(tds[i].innerText) ? 0 : parseInt(tds[i].innerText); 
} 

var row = table.insertRow(table.rows.length); 
var cell = row.insertCell(0); 
cell.setAttribute('colspan', ths.length); 

var totalBalance = document.createTextNode('Total Balance ' + sum); 
cell.appendChild(totalBalance); 

Link ad un jsfiddle https://jsfiddle.net/4cetuvno/1/

+0

Mi piace questa idea ma non funziona quando la eseguo da sola. Ottengo il saldo totale 0. – Spuds

+0

Se guardi il markup nel mio jsfiddle, corrisponde al tuo markup? Gli id, le classi e così via. Se lo fa, non vedo perché non funzionerebbe. Quando si esegue quel codice js? La tabella è resa? –