2016-07-05 4 views
1

Ich verwende die DataTables 1.10.11 mit der .sum() - Plugin-Option.Jquery-Databases mit Spalten, in denen der Wert als hyperpilk gerendert wird

Ich kann die Summe zu arbeiten und insgesamt, wenn die Spalte eine Zahl ist. Mein Problem ist, dass viele der Spalten als Hyperlinks gerendert wurden, um einen Drill-Down zu ermöglichen. Wenn ich darauf schließe, ist das Ergebnis Nan.

Jeder hat irgendwelche Ideen, wie man das umgeht.

Der folgende Code funktioniert in Spalte 13, da dies nicht gerendert wird. Spalten 3-12 schlagen fehl.

 $('#tblDebtors').dataTable({ 
       "autoWidth":false 
      , "drawCallback": function() { 
        var api = this.api(); 

        // Total over all pages 
        var total = api.column(13).data().sum(); 

        $(api.column(13).footer()).html(fncFmtNbr(total,2,"Y","Y")); 
       } 
      , "footer": true 
      , "info":false 
      , "JQueryUI":true 
      , "ordering":true 
      , "paging":false 
      , "scrollY":"470px" 
      , "scrollX":"1485px" 
      , "scrollCollapse":true 
      , "columnDefs": [ 
         { className: "Left", "targets": [ 0,1 ] } 
        , { className: "Center", "targets": [ 2 ] } 
        , { className: "Right", "targets": [ 3,4,5,6,7,8,9,10,11,12,13 ] } 
        , {"targets": 3, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Current_'+row[0]+'" href="#">'+row[3]+'</a>'; 
          } 
         } 
        , {"targets": 4, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Pd1_'+row[0]+'" href="#">'+row[4]+'</a>'; 
          } 
         } 
        , {"targets": 5, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Pd2_'+row[0]+'" href="#">'+row[5]+'</a>'; 
          } 
         } 
        , {"targets": 6, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Pd3_'+row[0]+'" href="#">'+row[6]+'</a>'; 
          } 
         } 
        , {"targets": 7, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Pd4_'+row[0]+'" href="#">'+row[7]+'</a>'; 
          } 
         } 
        , {"targets": 8, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Pd5_'+row[0]+'" href="#">'+row[8]+'</a>'; 
          } 
         } 
        , {"targets": 9, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Pd6_'+row[0]+'" href="#">'+row[9]+'</a>'; 
          } 
         } 
        , {"targets": 10, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Pd7_'+row[0]+'" href="#">'+row[10]+'</a>'; 
          } 
         } 
        , {"targets": 11, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Older_'+row[0]+'" href="#">'+row[11]+'</a>'; 
          } 
         } 
        , {"targets": 12, 
          "data": null, 
          "render": function (data, type, row) { 
           return '<a id="href_Total_'+row[0]+'" href="#">'+row[12]+'</a>'; 
          } 
         } 
       ] 
     }); 
+0

hilft Es wäre schön, eine Demo zu haben, um damit zu spielen. Haben Sie versucht, "api.column (13) .data()" -Werte zu betrachten? Ich frage mich, ob das HTML-Element, das den Wert enthält, nicht nur den Wert enthält, den Sie hinzufügen möchten. – Elfayer

+0

HI. Ich denke, das Problem ist, dass die API den HTML-Code in der Zelle liest. Der HTML-Code lautet 100,00 und nicht 100,00. Also schätze ich, ich versuche herauszufinden, wie man den Inhalt des summiert. – Keith

+1

Können Sie uns die Daten zur Verfügung stellen, die Sie in 'api.column (13) .data()' haben? – Elfayer

Antwort

0

Ich vermute, Sie so etwas wie this verwenden, wenn dem so ist es so ändern Sie Fall verwenden:

jQuery.fn.dataTable.Api.register('sum()', function(){ 
    return this.flatten().reduce(function(a, b){ 
     if (typeof a === 'string') { 
      a = a.text().replace(/[^\d.-]/g, '') * 1; 
     } 
     if (typeof b === 'string') { 
      b = b.text().replace(/[^\d.-]/g, '') * 1; 
     } 
     return a + b; 
    }, 0); 
}); 

Bitte beachten Sie, ohne eine Probe JSFiddle es schwierig ist, diesen Ansatz zu testen, aber im Grunde genommen Wir sind hinter dem Text im Anker. Anstatt es durch ein Multiplizieren wir konnten ParseInt es mit einem Dezimalwurzel oder einfach tun, um eine ~~ ...

Hoffnung, die

+0

Ja, das ist das Script "datatables_sum.js". Also denke ich, ich muss den Wrapper vom Zelleninhalt entfernen. – Keith

+0

Nein, ich änderte es zu: 'a = a.text(). Replace (/ [^ \ d .-]/g, '') * 1;', aber nachdem du darüber nachgedacht hast, musst du das wahrscheinlich tun : 'a = $ (a) .text(). ersetzen (/ [^ \ d .-]/g, '') * 1;' – annoyingmouse

Verwandte Themen