2013-06-27 29 views
29

Şu anda web tabanlı bir CRM üzerinde çalışıyoruz. Proje, sinir bozucu bir sorun dışında harika gidiyor.jQuery DataTable - Satırları istenen şekilde gizle

uygulamada hemen hemen her sortable tablo için DataTable jQuery plug-in kullanıyoruz. İşte aktif olayların bir listesi.

Gördüğünüz gibi

Open incidents

, üçüncü sütun önceki üstüne yerleştirilir

Kullanıcılar bir filtre kutusu istenen olaylar (bilet, değişiklik isteği, hizmet talebi, vs.) türünü temsil olayları filtrelemek için tablo. Örneğin, "Yalnızca bilet" seçeneğini belirlerseniz, diğer her tür gizlenir. Şimdiye kadar her şey çalışıyor.

Bunu yapmak için her satırın, olay türünü temsil eden bir CSS sınıfı vardır.

  • Sıra 1: sınıf = "Anahtar"
  • Satır 2: sınıf = "changeRequest"

filtre kutusu değerini verir, JavaScript kodu aşağıdaki yürütülür

$('table.sortable').each(function() { 
    for (var i = 0; i < rows.length; i++) { 
     if ($(rows[i]).hasClass(vClass)) $(rows[i]).hide(); 
    } 
}); 

  • vClass = CS Olay türü temsil eden S sınıfı
  • satır = Tüm dataTable satırları, "$ (SomeDatatable) .dataTable(). FnGetNodes();"
  • $ ('table.sortable') = Tüm datatables

Şimdi kemerlerinizi (Fransızca astar) sıkın. Bir satırı örtülü olarak gizlediğinizde, dataTable yine de sayar. İşte muhteşem sonuç.

Datatable on drugs

açıkladı varlık, ana soru gidiyor: Ben sonsuza silmeden satırları gizlemek istediğiniz dataTable diyeceğim nasıl? DataTable'ın bir filtre kutusu zaten var, ancak filtre tipi (görüntüde değil) ile birlikte bağımsız olarak çalışması gerekiyor.

İkinci bir filtre eklemenin bir yolu var mı?

+1

Size cevap veremiyorum ama kesinlikle çok detaylı ve açık bir soru için benden bir oy aldınız! – Liath

+0

Tablo jquery eklentisine aşina değilim, ancak bu ekstra filtrenin orijinal yerine geçici bir "klonu" oluşturduğunu düşündüğünüzde, bunun yerine göstermesi ve göstermesi gerekmeyen satırlar var mı? Bana öyle geliyor ki gizli satırlar hala DOM –

cevap

21

O tablo için özel bir filtre yazmak gerekir. Örnek:

$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) { 
    if ($(oSettings.nTable).hasClass('do-exclude-filtering')) { 
     return aData[16] == '' || $('#chkShowExcluded').is(':checked'); 
    } else return true; 
}); 

bu örnekte, dinamik olarak eklemek ve kaldırmak bir tabloya sınıf 'filtreleme-hariç yok', ve bu sınıfı vardır, eğer, belirli bir hücrenin bir değer olup olmadığını görmek için, her satır kontrol .Mantık, hayal edebileceğiniz her şey olabilir, sadece hızlı tutun (bu, her satır için, her çizim için, sayfadaki her tablo için uygulanır (DT'deki bir 'global' diziye eklenir, tek bir örnek değil).

Dönüş true, Üstbilgi satırı İşte

afnFiltering özelliklerini kullanmak Datatable referanstır gizlemek için false dönmek için: yerine .fnFilter() kullanmanın buna http://datatables.net/development/filtering

avantajı bu BOYUNCA çalışmasıdır İLE, kullanıcı sağ üstteki filtreleme kutusunu hala kullanabilir (varsayılan olarak, senin sağın altta olduğunu görüyorum) Onları göstermeyi seçtiğiniz sonuçları belirtin. Diğer bir deyişle, "tamamlanmış" öğelerin tümünü sakladığınızı varsayarsınız, böylece kullanıcı tablodaki 'tamamlanmamış' öğeleri görür. Sonra hala 'laptop' için tabloyu filtreleyebilir ve sadece BOTH eksik olan satırları görebilir ve açıklamalarına 'laptop' yazabilirler.

+0

'da olduğu gibi sayılacaklar. Tam bir cevap. Sağladığınız kodu uyarlamayı yeni bitirdim ve bir cazibe gibi çalıştı. Efendim, bugün benim kahramanımsın. Teşekkür ederim! –

+0

Yardımcı bulduğuna sevindim, bu kadar detaylı bir soru sorduğun için teşekkürler. Au revoir;) – BLSully

+0

Bu filtreyi sadece belirli bir tabloya eklemek mümkün mü? –

2

Veritabamı kısmına hiç kullanmadığım kadar yardımcı olamıyorum, ancak çalıştırmak javascript artırabilir zaman filtre kutusu değişikliği: uygun css stil

$('.table-sortable').find('tr.' + vClass).removeClass('hidden').addClass('show'); 
$('.table-sortable').find('tr:not(.' + vClass + ')').removeClass('hidden').addClass('show'); 

. Yoksa yapabilirdi: Bu yaklaşımlardan birini denerseniz

$('.table-sortable').find('tr.' + vClass).show(); 
$('.table-sortable').find('tr:not(.' + vClass + ')').hide(); 

yerine şanslı olsun ve Datatable sorunu aşmak ama her iki şekilde senin kod daha verimli olacağına inanıyoruz olabilir.

+0

Maalesef bu seçiciyi artık kullanmam. Ama eminim bu yöntemi bundan sonra kullanacağım. Farketmek ve paylaşmak için +1! –

İlgili konular