2016-04-06 15 views
0

Ajax kaynağından veri alan bir veri tabanım var, şu anda sütun 4'de azalan sırada sipariş ediliyor. Ancak, bir sütun olarak var olmayan tabloyu sipariş etmek istediğim bir dizi veriye sahibim. ve bugünün tarihine (sütun 4'te mevcut) Tablodaki tarihleri ​​arasında bir karşılaştırma yapmak Moment.JS kullanırDatatables 1.10 Veri dizisi ile sıralama

oTable = $('#Table').DataTable({ 
        "scrollX": true, 
        stateSave: false, 
        "processing": true, 
        "serverSide": false, 
        "ajax": "scripts/SSP_enquiry.php", 
        select: true, 
        colReorder: true, 
        "columnDefs": [ 
         { 
          "visible": false, 
          "searchable": false, 
          "targets": [9, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27] 
         }, 

         {className: "word", "targets": [1]} 


        ], 


        order: [4, 'desc'], 
        dom: '<"top">lrt<"bottom"pB><"clear">', 
        responsive: false, 
        buttons: [ 
         'excel' 
        ] 


       }); 

My fonksiyonu. Daha sonra farkı gün içinde dArray adlı bir diziye iter.

Dizimde, tablodaki satırla ilgili olması gereken her değer için bir Dizin var.

Yani ne yapmak istiyorum dArray

function dateGet() { 

       var idx = oTable 
        .columns(4) 
        .data() 
        .eq(0);// Reduce the 2D array into a 1D array of data 
       //console.log(idx); 

       var dArray = []; 
       var today = moment(); 

       $.each(idx, function(index,value) { 
        var tempDate = moment(value); 
        var deadlineDiff = tempDate.diff(today, 'days'); 
        dArray.push(index,deadlineDiff); 
        console.log(dArray); 
       }) 
      } 

yılında dArray

[0, 6] 
[1, 0] 
[2, -0] 
[3, -0] 
[4, -1] 
[5, -6] 
[6, -7] 
[7, -7] 
[8, -11] 
[9, -12] 
[10, -12] 
[11, -12] 
[12, -13] 

GÜNCELLEME

bir örnek değerlerine dayalı akım tablosunu sıralamak endeksi ve değer kullanmaktır

Varsayılan olarak 0 olan yeni bir sütun ekledim, bu yüzden şimdi değerleri ba son tarih farkları dizisi üzerinde sed. İlgili satırın kimliğini eşleştirmeleri gerekir.

result[j][0] result[j][1] böyle

function dateGet() { 

      var dArray = []; 
      var today = moment(); 
      var ID = oTable 
       .columns(0) 
       .data() 
       .eq(0); 
      var dDate = oTable 
       .columns(4) 
       .data() 
       .eq(0);// Reduce the 2D array into a 1D array of data 


      $.each(dDate, function (index, value) { 

       var tempDate = moment(value); 
       var deadlineDiff = Math.abs(tempDate.diff(today, 'days')); 
       dArray.push(deadlineDiff); 

      }); 

      var result = $.map(ID, function (el, idx) { 
       return [[el, dArray[idx]]]; 
      }); 

      oTable.rows().every(function (rowIdx, tableLoop, rowLoop) { 
       var data = this.data(); 

       for (var j = 0; j < result.length; j++) { 

        if (data[0] == result[j][0]) { 
//in here the ID in the table and the ID in the array 
// match, I need to iterate through rows and assign the value 
//in the array to column 28's cell 
        } 


       } 


      }); 
     } 
+1

Tıpkı bir öneri olarak ... 4. sütun için render işlevinde, tarihinizi içeren bir açıklığa bir veri niteliği ekleyebilir misiniz? Ve sonra tarihin kendisinden ziyade sipariş ver? – annoyingmouse

+0

hmmm öneriyoruz, dizideki değerleri karşılık gelen satır/sütun dizinine ekleyin ve ardından veri niteliğini sıralayın. Yapabileceğim bir fikrim yok, bir örneğiniz var mı? –

+0

@annoyingmouse haklıdır, daha da iyisi - 'render()' yöntemi bir 'sort' veya' filter' value istediğinde dizi değerini döndürür. – davidkonrad

cevap

1

Bir şey (eğer fark bağımsız olarak çalışmak istiyorum varsayarak gerek yapmalı dizide bana fark değeri verecektir dizide bana kimliğini verecek negatif veya pozitif:

$(function() { 
    var example = $("#example").DataTable({ 
     columns: [{ 
      "title": "Released Date", 
      "type": "int-diff", 
      "render": function(d){ 
       var diff = Math.abs(moment().diff(moment(d, "DD/MM/YYYY"), 'days')); 
       return $("<span></span>",{ 
        "text": d + " (" + diff + ")", 
        "data-diff": diff 
       }).prop("outerHTML"); 
      } 
     }] 
    }); 
}); 

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "int-diff-pre": function(a) { 
     return ~~$(a).data("diff"); 
    }, 
    "int-diff-asc": function(a, b) { 
     return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }, 
    "int-diff-desc": function(a, b) { 
     return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    } 
}); 

böyle bir tablo Verilen:

<table id="example"> 
    <thead> 
     <tr> 
      <th>Date</th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td>01/04/2016</td> 
     </tr> 
     <tr> 
      <td>02/04/2016</td> 
     </tr> 
     <tr> 
      <td>03/04/2016</td> 
     </tr> 
     <tr> 
      <td>04/04/2016</td> 
     </tr> 
     <tr> 
      <td>05/04/2016</td> 
     </tr> 
     <tr> 
      <td>06/04/2016</td> 
     </tr> 
     <tr> 
      <td>07/04/2016</td> 
     </tr> 
     <tr> 
      <td>08/04/2016</td> 
     </tr> 
     <tr> 
      <td>09/04/2016</td> 
     </tr> 
     <tr> 
      <td>10/04/2016</td> 
     </tr> 
     <tr> 
      <td>11/04/2016</td> 
     </tr> 
     <tr> 
      <td>12/04/2016</td> 
     </tr> 
     <tr> 
      <td>13/04/2016</td> 
     </tr> 
     <tr> 
      <td>14/04/2016</td> 
     </tr> 
    </tbody> 
</table> 

Çalışıyor JSFiddle. Temel olarak yaptığımız şey, bugünün tarihi ile hücredeki tarih arasındaki farkın, açıklığın içeriği ile birlikte bir veri niteliği olarak bir açıklıktaki pozitif bir tamsayı olarak koymaktır. Daha sonra bu veri niteliğini, yayının içeriği yerine sıralamak için kullanırız.

Bu yardımcı olur umarım.

+0

Ne yaptığınızı görebiliyorum, 28 tane sütun var. Bazıları, sınıfları/görünürlükleri ayarlamak için columnDefs gerektirir. Yapıyı biraz değiştirdim, böylece deadlineDateDifference adında fazladan bir sütun var. başlangıçta 0'a ayarlıyorum. Satır kimliğinin dizimde kimliğiyle eşleşip eşleşmediğini kontrol ediyorum. Tek ihtiyacım olan şey, bu satır ve sütun 28'in verilerini dizideki değere çevirmek için bir yoldur. kodu. –

+0

Mükemmel, yardım ettiğine sevindim. – annoyingmouse

+0

Yukarıda verdiğim ekstra kodu kullanarak yukarıdakilere nasıl ulaşabileceğimi biliyor musunuz? Böylece sütun da sıralanabilir mi? –