2014-07-09 10 views
1

Je travaille sur un projet où je reçois une date pour un DataTable jQuery sous la forme d'un format de chaîne (mm/jj/aaaa). Quand je fais un tri, il le trie comme une chaîne qui provoque le regroupement par mois, ce qui est incorrect. Je voudrais utiliser 'sType: date' pour gérer le tri mais comme ce n'est pas un objet date, il ne le triera pas. Existe-t-il un moyen de l'analyser à une date comme il est ajouté dans la table de données?jQuery DataTable Sort US Date Chaîne

Je n'ai trouvé une autre façon de le faire et le tri correctement, mais il ne fonctionne que dans les navigateurs autres que IE8 (la table a ~ 1000 lignes et provoque l'erreur de délai d'attente de script, le chrome fait instantanément)

jQuery.fn.dataTableExt.oSort['us_date-asc'] = function(a,b) { 
      if($(a).text()=="" && $(b).text()==""){ 
       return 0; 
      } 
      else if($(a).text()=="" || $(b).text()==""){ 
       return $(a).text()=="" ? -1 : 1; 
      } 
      else{ 
       var x = new Date($(a).text()); 
       var y = new Date($(b).text()); 
       return ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
      } 
    }; 

    jQuery.fn.dataTableExt.oSort['us_date-desc'] = function(a,b) { 
     if($(a).text()=="" && $(b).text()==""){ 
       return 0; 
     } 
     else if($(a).text()=="" || $(b).text()==""){ 
      return $(a).text()=="" ? 1 : -1; 
     } 
     else{ 
      var x = new Date($(a).text()); 
      var y = new Date($(b).text()); 
      return ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
     } 
    }; 

Je peux alors utiliser avec

"sType": 'us_date' 

Toutes les suggestions sur ce que je peux faire?

Répondre

1

J'ai réussi à obtenir ce fonctionnement à peine dans IE8 sans provoquer un délai d'attente de page. Il faut ~ 2 secondes pour trier ~ 1000 enregistrements avec 14 colonnes. (5 colonnes cachées). Chrome le fait instantanément.

jQuery.fn.dataTableExt.oSort['us_date-pre'] = function(a){ 
    if($(a).text()==""){ 
     return "19000101" * 1; 
    } 
    else{ 
     var usDatea = $(a).text().split('/'); 
     return (usDatea[2] + usDatea[0] + usDatea[1]) * 1; 
    } 
} 
jQuery.fn.dataTableExt.oSort['us_date-asc'] = function(a,b) { 
    return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
}; 

jQuery.fn.dataTableExt.oSort['us_date-desc'] = function(a,b) { 
    return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
}; 
+0

+1, oui - c'est une bonne solution. Vous devriez accepter votre propre réponse, en aidant peut-être d'autres personnes dans le futur, en la marquant comme résolue. – davidkonrad