You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.3 KiB
Plaintext
67 lines
1.3 KiB
Plaintext
/**
|
|
* @author: Brian Huisman
|
|
* @webSite: http://www.greywyvern.com
|
|
* @version: v1.0.0
|
|
* JS functions to allow natural sorting on bootstrap-table columns
|
|
* add data-sorter="alphanum" or data-sorter="numericOnly" to any th
|
|
*
|
|
* @update Dennis Hernández <http://djhvscf.github.io/Blog>
|
|
* @update Duane May
|
|
*/
|
|
|
|
function alphanum(a, b) {
|
|
function chunkify(t) {
|
|
var tz = [],
|
|
x = 0,
|
|
y = -1,
|
|
n = 0,
|
|
i,
|
|
j;
|
|
|
|
while (i = (j = t.charAt(x++)).charCodeAt(0)) {
|
|
var m = (i === 46 || (i >= 48 && i <= 57));
|
|
if (m !== n) {
|
|
tz[++y] = "";
|
|
n = m;
|
|
}
|
|
tz[y] += j;
|
|
}
|
|
return tz;
|
|
}
|
|
|
|
function stringfy(v) {
|
|
if (typeof(v) === "number") {
|
|
v = "" + v;
|
|
}
|
|
if (!v) {
|
|
v = "";
|
|
}
|
|
return v;
|
|
}
|
|
|
|
var aa = chunkify(stringfy(a));
|
|
var bb = chunkify(stringfy(b));
|
|
|
|
for (x = 0; aa[x] && bb[x]; x++) {
|
|
if (aa[x] !== bb[x]) {
|
|
var c = Number(aa[x]),
|
|
d = Number(bb[x]);
|
|
|
|
if (c == aa[x] && d == bb[x]) {
|
|
return c - d;
|
|
} else {
|
|
return (aa[x] > bb[x]) ? 1 : -1;
|
|
}
|
|
}
|
|
}
|
|
return aa.length - bb.length;
|
|
}
|
|
|
|
function numericOnly(a, b) {
|
|
function stripNonNumber(s) {
|
|
s = s.replace(new RegExp(/[^0-9]/g), "");
|
|
return parseInt(s, 10);
|
|
}
|
|
|
|
return stripNonNumber(a) - stripNonNumber(b);
|
|
} |