Home >Web Front-end >JS Tutorial >Juery's method to solve tablesorter Chinese sorting and character range_jquery
The example in this article describes Juery's method of solving tablesorter Chinese sorting and character range. Share it with everyone for your reference. The specific analysis is as follows:
tablesorter is an excellent table sorting plug-in among jQuery plug-ins. I believe everyone has used it or heard of it, so I won’t introduce it too much here. For more information, you can check out the official website: http://tablesorter .com/docs/ (the demo is relatively complete).
In several projects developed using tablesorter, two types of sorting problems were found, as follows:
The first problem is that Chinese characters cannot be sorted. This is because when sorting characters, the character size is compared using the unicode value. The code is as follows:
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)); };
The result we want is to sort by Chinese pinyin, so we can modify the code to the following code:
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); };
The localeCompare method is a method that comes with JS. Needless to say, as the name implies, this method compares the size of characters based on the current region. However, this method cannot handle polyphonic characters.
The second problem is that numeric data that exceeds the range cannot be sorted. This is because the data value is distorted during numeric type conversion, for example:
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
Such a deviation will make the sorting results inaccurate. In order to avoid this problem, the original values should not be used for comparison. Instead, weights should be introduced. From left to right, the weight corresponding to each numerical value decreases. Then the new value calculated based on the weight and the original value is used for comparison. This problem only needs to be modified by modifying the formatFloat method.
Js code
this.formatFloat = function(s) { // TODO var i = parseFloat(s); return (isNaN(i)) ? 0 : i; };
I hope this article will be helpful to everyone’s jQuery programming.