2010-09-16 15 views
5

Sto usando DataTable per visualizzare alcuni dati e funziona benissimo ma voglio personalizzarlo leggermente e non so come.Jquery DataTables cambia l'ordine in desc quando ordina

Quello che voglio fare è quando un utente fa clic su una colonna per ordinare quella colonna lo voglio ordinare inizialmente decrescente piuttosto che crescente. C'è un modo per fare questo?

+1

Entrambe le versioni 1.9 e 1.10 hanno modi simili di consegnare questo; vedi la risposta di SteD per 1.9 (ecco la [documentazione di asSorting 1.9] (http://legacy.datatables.net/usage/columns)) e la mia risposta sotto per l'ordinamento decrescente di default di 1.10 per 1 o più (o '_all'!) colonne. – veeTrain

risposta

11

Date un'occhiata a questo: DataTables sorting direction control example

Si può fare qualcosa di simile:

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

Grazie funziona alla grande! Sai in che modo quando si ordina si possono visualizzare campi vuoti/vuoti per ultimi invece che per primi? – John

+1

Grazie per questo. Ti capita di sapere se è stato aggiunto un modo per impostare l'impostazione predefinita per l'intera tabella? Non ero in grado di trovarne uno. – Dave

+0

Sembra che questo non funzioni con v. 1.10.x ora? Non riesci a trovare una soluzione appropriata. –

0

L'unico modo per ottenere il vostro quelli in bianco lo scorso sarebbe un po 'di hack (dal momento che la specie sta lavorando correttamente).

Invece di restituire i valori vuoti dal server, restituire qualcosa come: "[Bianco]"

non ho ancora testato, ma sono abbastanza sicuro parentesi quadre verrà dopo codici alfanumerici. Anche le parentesi quadre simboleggia tradizionalmente qualcosa che non è stato ancora completato o confermato.

2

In risposta a cernita spazi vuoti scorso, questo è quello che mi è venuta with--
(Odio gli spazi di smistamento prima !!)

Includere queste funzioni di ordinamento

// 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)); 
}; 

Applicare i tag di ordinamento alle colonne appropriate

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

o semplicemente aggiungi del testo nascosto per farlo comparire nel posto appropriato. Ex.

zzzzz
- un hack, ma facile da implementare. –

2

Se qualcun altro come Dave e io stavamo cercando un modo per impostare l'ordinamento su tutte le colonne, quanto segue potrebbe funzionare per voi. Al fine di modificare l'ordine in tutte le colonne ho creato un ciclo per modificare le impostazioni dopo il tavolo era un'istanza:

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

Speranza che aiuta. Testato su jQuery 1.11.0 e 1.10.0 DataTables

3

La versione corrente di DataTables (1.10) fornisce il seguente modo di commutazione questo ordinamento predefinito con la proprietà orderSequence sotto columnDefs (o columns ma meno flessibile).

Ecco la documentazione relativa orderSequence.

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

Come si menziona anche, si può forzare una colonna per solo specie quando si fa clic come DISC o ASC che l'interfaccia può benissimo beneficiare.

Nel mio caso, ho bisogno di avere le colonne che scendono loro ordinamento iniziale clicca per un numero indeterminato di colonne in modo ho deciso di passare l'esempio di indirizzare il nome di una colonna class invece di definire esplicitamente ogni colonna come "targets":[1],"targets":[2],...[n] o programatically costruzione una serie di indici di colonne a cui tenevo.

È possibile indirizzare le colonne più modi according to here.

Il risultato finale è una definizione di tabella in questo modo:

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

E Tabella dati il ​​potere in quanto tale:

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

Voila! Primo clic in ordine decrescente su tutte le colonne con un <th> contrassegnato con una classe di 'descendFirst' (un nome di classe descrittivo scelto arbitrariamente).

0

questo funziona per me:

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

     $('.dataTable').DataTable(settings); 
Problemi correlati