2017-06-13 2 views
0

Ich verwende Tablesorter (https://mottie.github.io/tablesorter/docs/index.html) Um meine HTML-Tabellen zu sortieren.benutzerdefinierte Sortierreihenfolge in Tablesorter - Jquery

Ich habe eine Sortierung, die ich nicht finden kann howtoo. dh.

  • (4)
  • (dns)
  • dns

ist so sortiert werden:

  • (4)
  • (dns)
  • dns

kurz: die() ignoriert werden, und numerische Sortierung, numerisch zuerst, dann alphabetisch.

Ich habe gesehen, wie man Zeichen ersetzt, (funktioniert nicht als "leer" wie einige Rang zu) Die Parser, die ich bis jetzt gesehen habe erfordern, dass ich per Header und bekannten Wert zu ersetzen. dh:

$.tablesorter.addParser({ 
    id: 'nummeriek', 
    is: function(s) { 
     return false; 
    }, 
    format: function(s) { 
     // format your data for normalization 
     return s.toLowerCase().replace('dns',999).replace('(dns)',999).replace('(4)',4); 
    }, 
    type: 'numeric' 
}); 

$('.tablesorter').tablesorter({ 
     headers: { 
      6: { 
       sorter:'nummeriek' 
      } 
     } 
}); 

Wenn ich diese Inhalte für jede mögliche Tabelle zu tun, ich Hunderte am Ende der replace() Aussagen zu schaffen. da ich Noten von 1 bis 100 habe. Also (1) bis (100) ist auch möglich ...

Es muss einen einfacheren Weg geben. Jede Hilfe wird sehr geschätzt.

Antwort

0

Der Standardparser digit "geht davon aus, dass in Klammern eingeschlossene Zahlen negativ sind"; Dies ist eine übliche Methode zur Angabe einer negativen Zahl in der Buchhaltung (ref).

Um dies zu umgehen, müssen Sie leicht den Parser (demo)

$(function() { 
    $.tablesorter.addParser({ 
    id: 'nummeriek', 
    is: function(s) { 
     return false; 
    }, 
    format: function(str) { 
     // format your data for normalization 
     var s = str.replace(/[()]/g, ""), 
     n = parseFloat(s); 
     return !isNaN(n) && isFinite(n) ? n : s; 
    }, 
    type: 'numeric' 
    }); 

    $('.tablesorter').tablesorter({ 
    headers: { 
     0: { 
     sorter: 'nummeriek' 
     } 
    } 
    }); 
}); 

Hinweis ändern: Dieser Parser ohne Klammern immer gibt eine nicht-numerische Zeichenfolge, zum Beispiel "(dns)" wird "dns". Ich behalte es so, so dass die "(DNS)" Einträge sortieren, als ob sie "DNS" sind.

+0

Jetzt ist das genial. Vielen Dank! – Pieter

+0

Das einzige, was ich noch habe, ist die Anzahl der Header. Da dies eine einspaltige Tabelle ist, kann ich leicht auch eine 2, 8, 12 eine variable Anzahl von Spalten haben. Ich habe versucht, mit den addClass-Methoden, die ich hier gefunden: https://StackOverflow.com/Questions/9014962/Jquery-TablesOrter-Custom-Parser-Toal-Al-Headers, aber ich kann es nicht für alle Spalten arbeiten .. Vermisse ich etwas? – Pieter

+0

Hoppla, sorry, ich habe deine Frage verpasst. In der 'headers'-Option können Sie einen jQuery-Selektor verwenden, um auf die Spalte anstatt auf einen nullbasierten Index zu zielen:' headers: {'.nummeriek': {sorter: 'nummeriek'}} '([Beispiel] (https:// mottie.github.io/tablesorter/docs/example-options-headers.html)). Oder fügen Sie jeder Spalte, die sie benötigt, eine Klasse 'sorter-nummeriek' hinzu. – Mottie

Verwandte Themen