2016-06-02 18 views
7

Veri tablosundaki 'SelectTüm' düğmesini kullanarak bir aramadan sonra görünür satırların seçilmesi - ı sonra tüm satırları seçmek için çalıştık DahaBöyle bir veri tablosu olan id <strong>örnek</strong> başlatılmış olan

var table = $("#example").DataTable({ 
    "aaSorting": [[4, "asc"]], 
    select: true, 
    dom: 'Bfrtip', 
    buttons: [ 
     'excelHtml5', 
     { 
      extend: 'pdfHtml5', 
      orientation: 'portrait', 
      pageSize: 'LEGAL' 
     }, 
     { 
      extend: 'print', 
      pageSize: 'LEGAL', 
      title: 'Visible rows' 
     }, 
     { 
      extend: 'selectAll', 
      className: 'selectall' 
     } 
    ], 
    language: { 
     buttons: { 
      selectAll: "Select all rows" 
     } 
    } 
}); 

selectAll düğmesi tıklandığında aşağıdaki koduyla bir arama -

table.on('search.dt', function (e) { 
    e.preventDefault(); 
    $(".selectall").click(function (e) { 
     e.preventDefault(); 
     var rows_after_search = table.rows({search: 'applied'}).nodes(); 
     rows_after_search.each(function() { 
      $(this).toggleClass('selected'); 
     }); 
    }); 
}); 

ben tür bundan sonra kayboldum. selectAll hala o sayfadaki tüm satırları seçiyor. Ayrıntılı bilgi için, Veri tablosunun geçerli sayfasında 10 satır olduğunu varsayalım. Aramadan sonra 2 satır gösteriliyor. Şimdi selectAll düğmesini tıkladığınızda 2 satırı seçmek istiyorum.

cevap

6

Genel sorununun, seçilmemiş (filtrelenmemiş) satırları sıfırlamamanız olduğuna inanıyorum. Filtrelenmiş satırlar için yalnızca .selected'u değiştiriyorsunuz, sonuçta tüm satırlar seçili olarak sonlanıyor. Ayrıca, aslında selectAll varsayılan işlevselliğini geçersiz kıldığınız için kodu action yöntemine yerleştiririm.

{ 
    extend: 'selectAll', 
    className: 'selectall', 
    action : function(e) { 
    e.preventDefault(); 
    table.rows({ page: 'all'}).nodes().each(function() { 
     $(this).removeClass('selected') 
    }) 
    table.rows({ search: 'applied'}).nodes().each(function() { 
     $(this).addClass('selected');   
    }) 
    } 
} 

demo ->https://jsfiddle.net/sqmz7z76/

+0

Cevabınız için teşekkürler. Bir kez senin yolunda düşündüm (seçilen sınıfı kaldırarak) ve denedim ama asla işe yaramadı. Olabilir, kod işleminde konumlandırma yöntemi tek yoldur. Tekrar teşekkürler. :) – ni8mr

6

davidkonrad kodu çoğunlukla haklı, ama resmi yöntemlerle değil.

{ 
    extend: 'selectAll', 
    className: 'selectall', 
    action : function(e) { 
    e.preventDefault(); 
    table.rows({ search: 'applied'}).deselect(); 
    table.rows({ search: 'applied'}).select(); 
    } 
} 

yerine basitçe 'seçilen' sınıfını geçmek, o da, "Tüm seçimleri kaldır" düğmesine sağlayan ve altbilgi görüntüler yöntemi 'seçeneğini()', çağırır: Bu doğru kod kullanmaktır metin kaç tane satırın seçildiğini size söyler.

+0

Muhtemelen tüm filtreler 'table.rows() 'i seçmelisiniz, sadece filtrelenmiş olanlar yerine deselect(). – sudee

İlgili konular