bootstrap-table-natural-sorting.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * @author: Brian Huisman
  3. * @webSite: http://www.greywyvern.com
  4. * @version: v1.0.0
  5. * JS functions to allow natural sorting on bootstrap-table columns
  6. * add data-sorter="alphanum" or data-sorter="numericOnly" to any th
  7. *
  8. * @update Dennis Hernández <http://djhvscf.github.io/Blog>
  9. * @update Duane May
  10. */
  11. function alphanum(a, b) {
  12. function chunkify(t) {
  13. var tz = [],
  14. x = 0,
  15. y = -1,
  16. n = 0,
  17. i,
  18. j;
  19. while (i = (j = t.charAt(x++)).charCodeAt(0)) {
  20. var m = (i === 46 || (i >= 48 && i <= 57));
  21. if (m !== n) {
  22. tz[++y] = "";
  23. n = m;
  24. }
  25. tz[y] += j;
  26. }
  27. return tz;
  28. }
  29. function stringfy(v) {
  30. if (typeof(v) === "number") {
  31. v = "" + v;
  32. }
  33. if (!v) {
  34. v = "";
  35. }
  36. return v;
  37. }
  38. var aa = chunkify(stringfy(a));
  39. var bb = chunkify(stringfy(b));
  40. for (x = 0; aa[x] && bb[x]; x++) {
  41. if (aa[x] !== bb[x]) {
  42. var c = Number(aa[x]),
  43. d = Number(bb[x]);
  44. if (c == aa[x] && d == bb[x]) {
  45. return c - d;
  46. } else {
  47. return (aa[x] > bb[x]) ? 1 : -1;
  48. }
  49. }
  50. }
  51. return aa.length - bb.length;
  52. }
  53. function numericOnly(a, b) {
  54. function stripNonNumber(s) {
  55. s = s.replace(new RegExp(/[^0-9]/g), "");
  56. return parseInt(s, 10);
  57. }
  58. return stripNonNumber(a) - stripNonNumber(b);
  59. }