Das Beispiel in diesem Artikel beschreibt Juerys Methode zur Lösung der chinesischen Tablesorter-Sortierung und des Zeichenbereichs. Teilen Sie es als Referenz mit allen. Die spezifische Analyse lautet wie folgt:
Tablesorter ist ein hervorragendes Plug-In zum Sortieren von Tabellen. Ich glaube, jeder hat es verwendet oder davon gehört, daher werde ich es hier nicht zu oft vorstellen. Weitere Informationen finden Sie im offiziellen Website: http://tablesorter.com/docs/ (die Demo ist relativ vollständig).
In mehreren mit Tablesorter entwickelten Projekten wurden zwei Arten von Sortierproblemen gefunden:
Das erste Problem besteht darin, dass chinesische Zeichen nicht sortiert werden können. Dies liegt daran, dass beim Sortieren der Zeichen die Zeichengröße anhand des Unicode-Werts verglichen wird. Der Code lautet wie folgt:
Js-Code
function sortText(a,b) { return ((a < b) ? -1 : ((a > b) ? 1 : 0)); }; function sortTextDesc(a,b) { return ((b < a) ? -1 : ((b > a) ? 1 : 0)); }; function sortText(a,b) { return ((a < b) ? -1 : ((a > b) ? 1 : 0)); }; function sortTextDesc(a,b) { return ((b < a) ? -1 : ((b > a) ? 1 : 0)); };
Das gewünschte Ergebnis ist eine Sortierung nach chinesischem Pinyin, sodass wir den Code in den folgenden Code ändern können:
Js-Code
function sortText(a,b) { return a.localeCompare(b); }; function sortTextDesc(a,b) { return b.localeCompare(a); }; function sortText(a,b) { return a.localeCompare(b); }; function sortTextDesc(a,b) { return b.localeCompare(a); };
Die Methode localeCompare ist eine Methode, die mit JS geliefert wird. Wie der Name schon sagt, vergleicht diese Methode jedoch die Größe von Zeichen basierend auf der aktuellen Region.
Das zweite Problem besteht darin, dass numerische Daten, die den Bereich überschreiten, nicht sortiert werden können. Dies liegt daran, dass der Datenwert während der numerischen Typkonvertierung verzerrt wird, zum Beispiel:
Js-Code
alert(parseFloat('9999999999999999')); // 10000000000000000 alert(parseFloat('10000000000000001')); // 10000000000000000 alert(parseFloat('10000000000000004')); // 10000000000000004 alert(parseFloat('10000000000000005')); // 10000000000000004 alert(parseFloat('10000000000000006')); // 10000000000000006 alert(parseFloat('9999999999999999')); // 10000000000000000 alert(parseFloat('10000000000000001')); // 10000000000000000 alert(parseFloat('10000000000000004')); // 10000000000000004 alert(parseFloat('10000000000000005')); // 10000000000000004 alert(parseFloat('10000000000000006')); // 10000000000000006
Eine solche Abweichung führt zu ungenauen Sortierergebnissen. Um dieses Problem zu vermeiden, sollten nicht die ursprünglichen Werte zum Vergleich verwendet werden. Stattdessen sollten die Gewichte für jeden numerischen Wert eingeführt werden Dann wird der neue, auf der Grundlage des Gewichts berechnete Wert mit dem ursprünglichen Wert zum Vergleich verwendet. Dieses Problem muss nur durch Ändern der formatFloat-Methode geändert werden.
Js-Code
this.formatFloat = function(s) { // TODO var i = parseFloat(s); return (isNaN(i)) ? 0 : i; };
Ich hoffe, dass dieser Artikel für alle bei der jQuery-Programmierung hilfreich sein wird.