bootstrap-table-natural-sorting.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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. var aa = chunkify(a);
  30. var bb = chunkify(b);
  31. for (x = 0; aa[x] && bb[x]; x++) {
  32. if (aa[x] !== bb[x]) {
  33. var c = Number(aa[x]),
  34. d = Number(bb[x]);
  35. if (c == aa[x] && d == bb[x]) {
  36. return c - d;
  37. } else {
  38. return (aa[x] > bb[x]) ? 1 : -1;
  39. }
  40. }
  41. }
  42. return aa.length - bb.length;
  43. }
  44. function numericOnly(a, b) {
  45. function stripNonNumber(s) {
  46. s = s.replace(new RegExp(/[^0-9]/g), "");
  47. return parseInt(s, 10);
  48. }
  49. return stripNonNumber(a) - stripNonNumber(b);
  50. }