mottie bootstrap jquery tablesorter

jquery - bootstrap - tablesorter filter



Uso de tablestaker jQuery para ordenar las fechas mm/aa (2)

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.

<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
  • La fecha se muestra en el formato mm / aa
  • La celda con fecha también recibe el año

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.


Creo que descubrirá que su problema es el constructor de fecha y la cadena de año de 2 dígitos que está pasando sin desambiguación: new Date(dateSplit[1], dateSplit[0], 1);

No creo que pueda (fácilmente) tener 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 , quita las etiquetas y luego combina CC con YY en tu análisis?


La documentación de tablesorter a menudo es bastante inútil, he encontrado. Parece que dice mucho, pero le faltan detalles.

En este caso, no te dice la firma de la función para un analizador. Afortunadamente, puedes leer el código no modificado para encontrarlo.

Ahí encontramos que el analizador de metadata hace esto:

format: function(s,table,cell) {

Esto significa que puede ajustar su método de formato 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.