2010-09-16 7 views
5

Używam DataTables do wyświetlania niektórych danych i działa świetnie, ale chcę go dostosować i nie wiem jak.Jquery DataTables zmienić porządek na desc, sortuje

Co chcę zrobić, gdy użytkownik kliknie nagłówek kolumny, aby posortować kolumnę, chcę, aby początkowo porządkowała malejąco, a nie rosnąco. Czy jest jakiś sposób to zrobić?

+1

Obie wersje 1.9 i 1.10 mają podobne sposoby przekazanie tego; zobacz odpowiedź SteD na 1.9 (tutaj jest dokumentacja [asSorting 1.9] (http://legacy.datatables.net/usage/columns)) i moja odpowiedź poniżej dla domyślnego sortowania zstępującego na 1 lub więcej dla 1 lub więcej (lub _ _all'!) kolumny. – veeTrain

Odpowiedz

11

Wystarczy popatrzeć na to: DataTables sorting direction control example

można zrobić coś takiego:

$(document).ready(function() { 
    $('#example').dataTable({ 
     "aoColumns": [ 
      { "asSorting": [ "desc", "asc" ] }, //first sort desc, then asc 
     ] 
    }); 
}); 
+0

Dzięki działa świetnie! Czy wiesz, że podczas sortowania możesz wyświetlać puste/puste pola jako ostatnie, a nie pierwsze? – John

+1

Dzięki za to. Czy wiesz, czy został dodany sposób ustawiania wartości domyślnych dla całej tabeli? Nie mogłem go znaleźć. – Dave

+0

Wygląda na to, że teraz nie działa z wersją 1.10.x? Nie można znaleźć odpowiedniego rozwiązania. –

0

Jedynym sposobem na zdobycie puste te ostatnia byłaby trochę hack (od sortowania działa prawidłowo).

Zamiast wracać puste wartości z serwera, coś w rodzaju powrotu: „[Puste]”

nie testowałem go, ale jestem prawie pewien, nawiasy kwadratowe przyjdą po kodów alfanumerycznych. Również nawiasy kwadratowe tradycyjnie symbolizują coś, co nie zostało jeszcze zakończone lub potwierdzone.

2

W odpowiedzi na ostatni sortowania półwyrobów, oto co wymyśliłem with--
(Nienawidzę wykroje sortowania pierwszy !!)

Obejmują one zwyczaj sortowania działa

// custom sort functions 
jQuery.fn.dataTableExt.oSort['text-blankslast-asc'] = function (x, y) { 
    x = (x == "") ? String.fromCharCode(255) : x; 
    y = (y == "") ? String.fromCharCode(255) : y; 
    return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
}; 

jQuery.fn.dataTableExt.oSort['text-blankslast-desc'] = function (x, y) { 
    x = (x == "") ? String.fromCharCode(0) : x; 
    y = (y == "") ? String.fromCharCode(0) : y; 
    return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
}; 

Zastosuj znaczniki sortowania do odpowiednich kolumn:

// init example 
$('#table2').dataTable({ 
    "bJQueryUI": true, 
    "aoColumns": [ 
     null, 
     { "sType": "text-blankslast" }, 
     { "sType": "text-blankslast" }, 
     { "sType": "text-blankslast" }, 
     null 
    ] 
}); 
+0

lub po prostu dodaj ukryty tekst, aby był wyświetlany w odpowiednim miejscu. Dawny.

zzzzz
- hack, ale łatwe do wdrożenia. –

2

Jeśli ktoś inny jak Dave i ja szukamy sposobu, aby ustawić porządek sortowania we wszystkich kolumnach, poniższe mogą Ci pomóc. Aby zmienić kolejność sortowania na wszystkich kolumnach skonfigurować pętlę zmienić ustawienia po tabela była instancja:

$(document).ready(function() { 
    var example_table = $('#example').dataTable(); 
    $.each(example_table.dataTableSettings[0].aoColumns, function(key, column) { 
     column.asSorting = [ "desc", "asc" ]; 
    }); 
}); 

nadzieję, że pomoże. Testowane na jQuery 1.11.0 i 1.10.0 DataTables

3

Aktualna wersja DataTables (1.10) przewiduje w następujący sposób przełączania tego domyślnego sortowania z właściwością orderSequence pod columnDefs (lub columns ale mniej elastyczne).

Oto dokumentacja na orderSequence.

"columnDefs": [ 
    { "orderSequence": [ "desc", "asc"], "targets": [ 1 ] }, 
] 

Jak wspomina również, można wymusić kolumny tylko sortowania po kliknięciu jako ASC lub DESC który swoją interfejs może równie dobrze korzystać.

W moim przypadku musiałem mieć kolumny malejąco ich rodzaju na początkowym kliknięcia dla nieokreślonej liczby kolumn więc postanowiłem przełączyć przykład kierować nagłówek kolumny class nazwę zamiast jednoznacznie określające każdą kolumnę jako "targets":[1],"targets":[2],...[n] lub programowo budowania tablica indeksów kolumn, na których mi zależało.

Możesz kierować reklamy na kolumny na wiele sposobów: according to here.

Końcowym rezultatem jest definicja tabeli tak:

<table><thead><tr> 
    <th class='descendFirst'>DESCend when first clicked</th> 
    <th>a normally sorted ASC->DESC->... column</th> 
    ... 
</tr></thead></table> 

i tabela danych uprawniona jako takie:

$("#table").dataTable({ 
    "columnDefs": [ 
     {"orderSequence": ["desc","asc"], "targets":"descendFirst" }, 
    ] 
}); 

Voila! Najpierw kliknij sortowanie malejące na wszystkich kolumnach z wartością <th> oznaczoną klasą "descendFirst" (arbitralnie wybraną, opisową nazwą klasy).

0

Działa to dla mnie:

 settings = { 
      aoColumnDefs: [ 
      { 
       orderSequence: ["desc", "asc"], 
       aTargets: ['_all'] 
      } 
     ]}; 

     $('.dataTable').DataTable(settings); 
Powiązane problemy