Suma totală pentru coloană

please refer to previous question here: Sum total for column in jQuery

i used Aymen's solution, but i edited it to suite my need. It stopped working, my code as below as seen at jsfiddle: http://jsfiddle.net/unKDk/15/

<table id="sum_table" width="300" border="1">
    <tr class="titlerow">
        <td>Apple</td>
        <td>Orange</td>
        <td>Watermelon</td>
        <td>Strawberry</td>
        <td>Total By Row</td>
    </tr>
    <tr>
        <td class="rowAA">1</td>
        <td class="rowAA">2</td>
        <td class="rowBB">3</td>
        <td class="rowBB">4</td>
        <td class="totalRow"></td>
    </tr>
    <tr>
        <td class="rowAA">1</td>
        <td class="rowAA">2</td>
        <td class="rowBB">3</td>
        <td class="rowBB">4</td>
        <td class="totalRow"></td>
    </tr>
    <tr>
        <td class="rowAA">1</td>
        <td class="rowAA">5</td>
        <td class="rowBB">3</td>
        <td class="rowBB">4</td>
        <td class="totalRow"></td>
    </tr>
    <tr class="totalColumn">
        <td class="totalCol">Total:</td>
        <td class="totalCol">Total:</td>
        <td class="totalCol">Total:</td>
        <td class="totalCol">Total:</td>
        <td class="totalCol">Total:</td>
    </tr>
</table>

Partea jQuery este

var totals=[0,0,0,0,0];
$(document).ready(function(){

    var $dataRows=$("#sum_table tr:not('.totalColumn, .titlerow')");

    $dataRows.each(function() {
        $(this).find('.rowAA').each(function(i){        
            totals[i]+=parseInt( $(this).html());
        });

        $(this).find('.rowBB').each(function(i){        
            totals[i]+=parseInt( $(this).html());
        });        
    });
    $("#sum_table td.totalCol").each(function(i){  
        $(this).html("total:"+totals[i]);
    });

});
  1. modul de rezolvare a problemei care a cauzat calculele greșite.
  2. cum se calculează totalul după rând
  3. Am nevoie de numele exact al clasei.
0
@ Rededbox Dacă sunteți în căutarea unei soluții care funcționează cu orice număr de rânduri și coloană, am oferit unul mai jos.
adăugat autor Sampson, sursa
O întrebare privind SO ar trebui să fie complet autonomă și nu o urmărire care necesită legătura cu o întrebare anterioară.
adăugat autor Sparky, sursa
adăugat autor Sparky, sursa

2 răspunsuri

În esență, doriți să direcționați toate elementele td care sunt în rândurile de mijloc. De fiecare dată când treci peste un nou td , vrei să adaugi valoarea lui la ultimul td din rândul său (dacă nu este ultimul td în rând) și de asemenea, la td în ultimul rând care împarte indexul său.

$("#sum_table tr:not(:first,:last)").each(function(c,row) {
  $("td",row).text(function(i,t) {
    var n = parseInt( t, 10 ) || 0;
    $(this).nextAll(":last-child").text(function(a,o) {
      return n + ( parseInt( o, 10 ) || 0 );
    });
    $(row).nextAll("tr:last").find("td:nth-child("+(++i)+")").text(function(a,o){
      return "Total: " + ( n + ( parseInt( o.replace(/[^\d]/g,""), 10 ) || 0 ) );
    });
  });
});

Acest lucru ar trebui să funcționeze pentru orice tabel de orice dimensiune, fără a vă limita la coloane x sau y rânduri.

Fiddle: http://jsfiddle.net/unKDk/34/

Cu Comentariu

Vă încurajez să citiți comentariile din exemplul de mai jos, deoarece acestea vă vor ajuta să înțelegeți ce se întâmplă cu fiecare linie.

// For each table row that is not first or last
$("#sum_table tr:not(:first,:last)").each(function(c,row) {
 //For each td within this row
  $("td",row).text(function(i,t) {
   //Determine numerical value of this td's content
    var n = parseInt( t, 10 ) || 0;
   //Find last td in this row, change its text
    $(this).nextAll(":last-child").text(function(a,o) {
     //Increment its value with the value of current TD
      return n + ( parseInt( o, 10 ) || 0 );
    });
   //Find last row, and td within of same index as current td, change its text
    $(row).nextAll("tr:last").find("td:nth-child("+(++i)+")").text(function(a,o){
     //Increment its value (removing non-numbers) with the value of current td
      return "Total: " + ( n + ( parseInt( o.replace(/[^\d]/g,""), 10 ) || 0 ) );
    });
 //End our td loop
  });
// End our tr loop
});
0
adăugat
mulțumesc acest ajutor
adăugat autor Redbox, sursa

Nu sunt destul de sigur ce vreți, dar dacă doriți doar să înscrieți toate rândurile după coloană, vedeți mai jos ..

var totalsByRow = [0, 0, 0, 0, 0];
var totalsByCol = [0, 0, 0, 0, 0];
$(document).ready(function() {

    var $dataRows = $("#sum_table tr:not('.totalColumn, .titlerow')");

    $dataRows.each(function(i) {
        $(this).find('td:not(.totalRow)').each(function(j) {
            totalsByCol[j] += parseInt($(this).html());
            totalsByRow[i] += parseInt($(this).html());
        });
    });

    for (var i = 0; i < totalsByCol.length - 1; i++) {
        totalsByCol[totalsByCol.length - 1] += totalsByCol[i];       
    }    

    $("#sum_table td.totalCol").each(function(i) {
        $(this).html("total:" + totalsByCol[i]);
    });

    $("#sum_table td.totalRow").each(function(i) {
        $(this).html("total:" + totalsByRow[i]);
    });
});

DEMO

0
adăugat
sumă pe coloană este de lucru acum, ce zici de rând? trebuie să însumeze aceeași valoare de rând și să o plasați în clasa totalRow
adăugat autor Redbox, sursa
mulțumesc de lucru minunat
adăugat autor Redbox, sursa
@ Redbox Verificați postarea actualizată pentru numărul total pe rând și coloană.
adăugat autor Selvakumar Arumugam, sursa
@Redbox Actualizat pentru totalul total.
adăugat autor Selvakumar Arumugam, sursa
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com