Pregunta

He estado tratando desde hace días para conseguir jQuery tablesorter ordenar correctamente los números en mi columna de la tabla.

Estoy utilizando las últimas versiones actuales de ambas secuencias de comandos.

La mesa se hace bien, pero la clasificación de los números no está funcionando correctamente.

Cuando ordenar una columna número me da los siguientes resultados:

8 7 4 32 31 3 etc ..

donde se espera: 32 31 8 etc ...

He leído algunos comentarios sobre cómo añadir código JavaScript extra, pero no puedo encontrar ningún buenos ejemplos de JavaScript.

El jQuery que estoy usando ahora es la siguiente:

$(document).ready(function()
    {
      $("#table1")
       .tablesorter(
          {
            sortList: [[0,0]],
            widthFixed: true,
            widgets: ['zebra']
          } )
    }
);

Aquí está mi HTML:

<table id="table1" class=tablesorter>
    <thead>
        <tr>
            <th width=65>Name</th>
            <th width=40>Count</th>
        </tr>
     </thead>
     <tbody>
         <tr><td>Name_1</td><td>32</td></tr>
         <tr><td>Name_2</td><td>12</td></tr>
         <tr><td>Name_3</td><td>11</td></tr>
         <tr><td>name_4</td><td>14</td></tr>
         <tr><td>Name_5</td><td>7</td></tr>
         <tr><td>Name_6</td><td>3</td></tr>
         <tr><td>Name_7</td><td>32</td></tr>
         <tr><td>Name_8</td><td>31</td></tr>
         <tr><td>Name_9</td><td>35</td></tr>
      </tbody>
</table>
¿Fue útil?

Solución 2

<th width=110 class=\"{sorter: 'digit'}\">Count</th>

Esto resolvió el problema. Decir la Javascript para manejar el valor es como un dígito hizo el trabajo de clasificación correcta. Todavía poco tonto que los valores numéricos no se comprueban en el guión como ser números. Pero supongo que hay un propósito mayor para que al final.

Gracias a todos por su tiempo y ayuda

/ Fons

Otros consejos

Esperamos que esto ayudará a alguien si se encuentran con este post, en tablesorter ahora se puede simplemente utilizar.

$(".table").tablesorter({
     headers: {
         5: { sorter: 'digit' } // column number, type
     }
 });

Esto puede haber sido obvio para los demás (no para mí), pero para obtener la solución de trabajo con el clasificador {: 'dígito'} metadatos es necesario utilizar el jQuery metadatos Plugin .

Sé que esto es una vieja pregunta, pero me encontré con el mismo problema y en vez de intentar cualquier solución publicado aquí, usted debe comprobar primero la versión de su plugin. Cada problema se resolvió cuando descubrí Yo tampoco el uso de la nueva versión (2.0.5)

Parece que necesita para rellenar sus números. Eso explica por qué 8, 7 y 4 están clasificadas antes de las 32 y 31.

Prueba esto:

function padLeft(s,len,c){
  c=c || '0';
  while(s.length< len) s= c+s;
  return s;
}

$("table").tablesorter({
  textExtraction: function(node) {         
    return padLeft(node.innerHTML,2);
  } 
});

Utilice un valor más alto que 2 si es necesario ordenar los números más grandes.

Usted puede tratar esto, así:

$(document).ready(function() { 
    $("table").tablesorter({ 
        // put other options here ...
        textExtraction: function(node) {  
            return parseInt($(node).text()); 
        } 
    }); 
});

... esto trata el contenido de las células clasificadas como enteros, después de extraer sólo el texto.

Se puede mostrar su html así? Tablesorter debe detectar y manejar la clasificación numérica y sin ninguna opción especial. ¿Es posible que los valores numéricos están rodeados de html? En ese caso, es posible que necesite un para extraer los valores de el html.

Ejemplo desde el enlace de referencia:

$(document).ready(function() { 

    // call the tablesorter plugin 
    $("table").tablesorter({ 
        // define a custom text extraction function 
        textExtraction: function(node) { 
            // extract data from markup and return it  
            return node.childNodes[0].childNodes[0].innerHTML; 
        } 
    }); 
});

Encontrar en código jquery.tablesorter.js:

this.isDigit = function(s,config) {

    var DECIMAL = '\\' + config.decimal;
    var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';

    return RegExp(exp).test($.trim(s));
};

y reemplazarlo con:

this.isDigit = function(s,config) {

    var DECIMAL = '\\' + config.decimal;
    var exp = '/(^[+]?0(' + DECIMAL +'0+)?$)|(^([-+]?[1-9][0-9]*)$)|(^([-+]?((0?|[1-9][0-9]*)' + DECIMAL +'(0*[1-9][0-9]*)))$)|(^[-+]?[1-9]+[0-9]*' + DECIMAL +'0+$)/';

    //return RegExp(exp).test($.trim(s));
    return !isNaN(parseFloat($.trim(s))) && isFinite($.trim(s));
};
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top