2016-05-09 136 views
7

Sto utilizzando il plug-in DataTable di jquery e in una delle mie tabelle ho voluto ordinare il risultato in base alla colonna di data e ora. Quindi, ho incluso moment.js versione 2.13.0 e la mia versione dataTable è 1.10.10 e la mia versione jQuery è 1.9.1.

Come suggerito in questa ultima data ora dataTable ordinamento articolo plug https://datatables.net/blog/2014-12-18, ho provato quanto segue ma nella console ho

TypeError: $.fn.dataTable.moment is not a function 
$.fn.dataTable.moment('DD-MMM-Y HH:mm:ss'); 

nella mia pagina html,

$(document).ready(function() { 
    $.fn.dataTable.moment('DD-MMM-Y HH:mm:ss'); 
    $('#myTable').DataTable(); 
}); 

miei dati colonna Data ha data in questo formato, 09-May-2016 19:38:00. E ho scambiato l'ordine in cui l'origine del plug-in dataTable e moment.js è inclusa nella mia pagina html. Ma ho ancora lo stesso errore. Quale potrebbe essere il problema?

+0

Hai importato il plug-in di ordinamento _data/ora_ come suggerito nell'articolo collegato? Devi importare: // // cdn.datatables.net/plug-in/1.10.11/sorting/datetime-moment.js' – VincenzoC

+0

@VincenzoC sì, ho provato ad aggiungere anche quello js. Ho provato ad includerlo localmente anche nella versione CDN. Viene visualizzato lo stesso messaggio di errore – Lucky

risposta

3

Problema della cache del browser. I file JS che ho incluso non vengono correttamente scaricati nel browser che causa il problema. Ho cancellato la cache e ho usato la versione CDN. E ha funzionato bene. Ecco il mio codice di lavoro se qualcuno ha bisogno, in futuro,

JS importazioni:

<script th:src="@{/js/jquery-1.8.3.js}" /> 
<script th:src="@{/js/jquery.datatables.min.js}" /> 
<script th:src="@{//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js}" /> 
<script th:src="@{//cdn.datatables.net/plug-ins/1.10.11/sorting/datetime-moment.js}" /> 

DataTable init:

$(document).ready(function() { 

    $.fn.dataTable.moment('DD-MMM-Y HH:mm:ss'); 

    $('#jobcardsTable').DataTable({ 
     responsive: true, 
     "order": [[ 2, "desc" ]] 
    }); 

}); 

Così, quando inizialmente i carichi DataTable la data formattata personalizzato viene analizzato dal terzo colonna usando moment.js e ordinati in ordine decrescente.

+0

Il formato è applicato sul tuo tavolo? Per me non sta funzionando. – FrenkyB

+0

Il mio codice (non funzionante): $ ('# tblResults'). DataTable ({ "columnDefs": [ {target: [5, 6], render: $ .fn.dataTable.moment ("DD.MM. YYYY ")} ], – FrenkyB

+0

@FrenkyB Funziona bene per me. Puoi fare una demo jsfiddle del tuo codice o una nuova domanda e collegarla qui? – Lucky

8

L'ordine di importazione degli script è importante. È necessario includere i datatables prima del plug-in di ordinamento. I seguenti lavori per me:

<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.2.1/jquery.min.js"></script> 
<script src="//cdnjs.cloudflare.com/ajax/libs/moment.js/2.11.2/moment.min.js"></script> 
<script src="//cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script> 
<script src="//cdn.datatables.net/plug-ins/1.10.12/sorting/datetime-moment.js"></script>