2009-01-16 6 views
6

Estoy usando el plugin jQuery tablesorter para ordenar una tabla. En mi caso, las columnas de mi tabla muestran la fecha en formato mm/aa.Uso de tablestaker jQuery para ordenar las fechas mm/aa

<tr> 
    <td class="col-name">...</td> 
    ... 
    <td rel="2000" class="col-dob">10/00</td> 
    ... 
</tr> 
<tr> 
    <td class="col-name">...</td> 
    ... 
    <td rel="1986" class="col-dob">11/86</td> 
    ... 
</tr> 

Nota:

  • Cada celda tiene una clase única
  • fecha se muestra en el formato mm/aa
  • celular con fecha recibe el año, así

Mi código jQuery es el siguiente:

// add parser through the tablesorter addParser method 
$.tablesorter.addParser({ 
     // set a unique id 
     id: 'user-birthdate', 
     is: function(s) { 
       // return false so this parser is not auto detected 
       return false; 
     }, 
     format: function(s) { 
       // format your data for normalization 

       var dateSplit = s.split('/'); 

       if(2 !== dateSplit.length) 
         return 0; 

       return new Date(dateSplit[1], dateSplit[0], 1); 
     }, 
     // set type, either numeric or text 
     type: 'numeric' 
}); 

myClass.init = function() { 
     $('.module .user table').tablesorter({ 
       sortList: [[0,0]],  
      widgets: ['zebra'], 
       headers: { 
         5: { 
           sorter:'user-birthdate' 
         } 
       } 
     }); 
} 

myClass.init(); 

Mi problema es que tableSorter interpreta 00 como año 1900 en lugar de 2000 y, por lo tanto, los datos ordenados no son correctos.

¿Alguna pista de cómo puedo resolver esto? Estoy usando jQuery 1.2.6 y la última versión de tablesorter.

Respuesta

9

La documentación de tablesorter a menudo es bastante inútil, he encontrado. Es parece como dice mucho, pero falta en los detalles.

En este caso, no indica la firma de la función de un analizador. Afortunadamente, puedes leer the unminified code para encontrarlo.

Allí encontramos que el analizador metadata hace esto:

format: function(s,table,cell) { 

Esto significa que usted puede ajustar su método format a:

format: function(s, table, cell) { 
    // format your data for normalization 

    var dateSplit = s.split('/'); 
    var year = $(cell).attr('rel'); 

    if(2 !== dateSplit.length) 
     return 0; 

    return new Date(year, dateSplit[0], 1); 
}, 

O al menos similar a eso. Realmente no he probado esto. Pero debería estar al menos muy cerca.

+0

Gracias David. Esperando para probar esto el lunes. Se actualizará aquí. – hitec

+0

Esta solución solucionó mi problema. Gracias David. – hitec

+0

Esto también fue útil para ordenar una columna de fecha que tenía algunos valores en blanco. Gracias por publicar esto. –

0

creo que se dará cuenta de que su problema es el constructor Fecha y la cadena de año de 2 dígitos que está de paso y sin desambiguación: new Date(dateSplit[1], dateSplit[0], 1);

no creo que se puede (fácilmente) obtener acceso a rel basado en s en el analizador. ¿Tiene s todo el contenido de la celda? ¿Puedes hacer algo en los datos en la celda como: <span style="display : none">CC</span>MM/YY, quitar las etiquetas y luego combinar CC con YY en tu análisis?

+0

Afortunadamente, la función del analizador pasa el objeto de la celda también. Ver mi respuesta :) – David

Cuestiones relacionadas