Frage

Ich habe seit Tagen versucht, jQuery tablesorter richtig sortieren Zahlen in meinem Tabellenspalte zu erhalten.

Ich bin die aktuellen neuesten Versionen der beiden Skripte verwenden.

Die Tabelle wird gemacht in Ordnung, aber die Zahlen Sortierung funktioniert nicht richtig.

Wenn ich eine Nummer Spalte sortieren es mir die folgenden Ergebnisse ergibt:

8 7 4 32 31 3 etc ..

, wo man erwarten würde: 32 31 8 etc ...

las ich einige Kommentare auf dem Hinzufügen zusätzlichen JavaScript-Code, aber ich kann keine guten Javascript Beispiele finden.

Die jQuery Ich verwende jetzt ist wie folgt:

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

Hier ist mein 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>
War es hilfreich?

Lösung 2

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

Dieses löste das Problem. Erklären des Javascript um den Wert zu handhaben ist, als eine Ziffer die Sortierarbeit richtig gemacht. Noch etwas albern, dass Zahlenwerte nicht im Skript als Zahlen geprüft werden. Aber ich denke, es gibt einen höheren Zweck, dass am Ende.

Danke allen für Ihre Zeit und Hilfe

/ Fons

Andere Tipps

Dies wird hoffentlich jemand helfen, wenn sie diesen Beitrag finden, in Tablesorter Sie jetzt einfach nutzen können.

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

Das für andere offensichtlich gewesen sein (nicht zu mir), aber die Lösung zu erhalten die Arbeit mit dem {Sorter: ‚Ziffer‘} Metadaten Sie die jQuery Metadaten-Plugin .

Ich weiß, dass dies eine alte Frage, aber ich kam über das gleiche Problem und stattdessen eine Lösung hier gepostet zu versuchen, sollten Sie zunächst die Version Ihres Plugins überprüfen. Jedes Problem wurde gelöst, als ich herausfand, Ich war nicht die neueste Version mit (2.0.5)

Es sieht aus wie Sie Pad Ihre Zahlen benötigen. Das erklärt, warum 8, 7 und 4 sind vor 32 bestellt und 31.

Versuchen Sie folgendes:

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);
  } 
});

Mit höheren Wert als 2, wenn Sie größere Zahlen sortieren müssen.

Sie könnten versuchen, dies auch:

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

... diese behandelt den Inhalt sortierten Zellen als ganze Zahlen, nach nur den Text zu extrahieren.

Können Sie zeigen Ihre HTML als auch? Tablesorter sollte erkennen und die numerische Sortierung ohne besondere Optionen zu behandeln. Ist es möglich, dass Ihre numerischen Werte von HTML umgeben sind? In diesem Fall können Sie eine benutzerdefinierte Methode rel="nofollow die Werte zu extrahieren aus die html.

Beispiel aus dem referenzierten Link:

$(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; 
        } 
    }); 
});
Finden

in jquery.tablesorter.js Code:

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));
};

und ersetzen Sie es mit:

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));
};
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top