2016-02-05 16 views
6

İşlemlerim için veri içeren JSP'mde oluşturulmuş bir tablo var: her bir işlem bir satırdır ve kategori, miktar, tür ve açıklama için bir sütun var.Javascript kullanarak tek bir tablo sütunu nasıl toplamlanır?

<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> 

Yani

Category____Amount____Type____Description olarak çıkar

Benim masa Struts kullanılarak doldurulur: Başka bir JSP üzerinde bir bölüm seçip "ekranı" basın tablosunu oluşturur sayfasına iletmek . Bu nedenle, tablo mutlaka belirli sayıda satıra sahip olmayacaktır. Yapmaya çalıştığım şey, her bir işlemden Tutar sütununu toplamaktır, böylece toplamı görüntüleyebilirim. Bunu kullanarak JavaScript yapmaya çalıştık ama benim için çalıştı değil: Ben mahvettigini veya daha iyi bir seçenek neyi nerede olabileceğini

<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> 

kimse görebilir miyim? Ayrıca, sütunları toplamak ve tabloya başka bir satır eklemeden toplamı görüntülemek için bir yol var mı? Mümkünse bu ideal olur.

+1

için

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); 

Bağlantı javascript kullanarak bunu yapmak için hiçbir nokta, ama jsp kullanabilirsiniz basit bir sayaç. –

+0

böyle bir şey demek istediniz ' $ {total.value}' – Spuds

cevap

2

Değişkeniniz tdscls olarak adlandırılmalıdır. İşte çalışan bir örnek.

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

https://jsfiddle.net/34wf5gzs/

. Bunu bir JS çerçevesi kullanarak veya JSP'de bir sayaç kullanarak özetlemekten daha iyidir. Özel komut dosyaları sürdürmek için biraz çaba gerektirir.

+0

O değişken adı cevapsız inanamıyorum .. Örnek için teşekkürler, ancak tabloya eklemeye çalışırsam sadece boş görünür. Burada özlediğim başka bir şey var mı? – Spuds

+0

'innerHTML' yazı tipindedir ve bir ekleme yöntemine sahip değildir. Bunun yerine metni değiştirmeniz gerekir. Sizin için güncel bir örneğim var - https://jsfiddle.net/34wf5gzs/1/ –

+0

Örneğinizi çalıştırmaya çalıştığımda toplamı sıfır olarak geliyor. Bunun neden olduğunu anlayamadım. – Spuds

2

JSP hakkında hiçbir bilgim yok ama Roma C'nin doğru olduğunu varsayalım.

Ama burada javascript ile bu çözmek için wan't bir çalışma örneğidir: Bir jsfiddle https://jsfiddle.net/4cetuvno/1/

+0

Bu fikri beğeniyorum ama kendim çalıştırdığımda işe yaramıyor. Toplam bakiye 0 aldım. – Spuds

+0

Eğer jsfiddle'imde işaretlemeye bakarsanız, işaretleme ile uyuşmuyor mu? Kimlikler, sınıflar vb. Eğer yaparsa neden işe yaramayacağını anlamıyorum. Bu js kodunu ne zaman çalıştırıyorsunuz? Tablo işlendi mi? –

İlgili konular