Witam, mam problem z wyświetleniem elementów galerii wg określonych wartości value.

Do sortowania używam jquery poprzez przesuwanie zdjęć, pozycję tych zdjęć zapisuję do tablicy -> a potem do bazy danych.

Po pobraniu do danego zdjęcia do wartości value jest przypisywana wartość poprzednio zapisana.
Problem polega na samym sortowaniu ponieważ zdjęcia nie wyświetlają się w kolejności jaka jest w tablicy.

Sortowanie jest po value, w nim mam liczby i wg sortu wartość value="25" jest mniejsza niż value="9" dlatego pokazuje mi złą kolejność. Jak mogę to zmienić aby wartości np. 0 - 40 były sortowane poprawnie a nie 0,1,10,11, ....

Cały skrypt z opisem znajduje się tutaj
TUTAJ.

U mnie odczyt kolejności pobierany jest z bazy

  1. var kolejnosc = $("#sort_wstaw").val();
  2. if(kolejnosc != ''){
  3.  
  4. //wyciągamy informację z ciasteczka i deserializujemy
  5. var kol = kolejnosc.split(',');
  6. alert(kol);
  7. for(var j=0;j<kol.length;j++){
  8. //ustawiamy value elementom wg. tego jaką kolejność powinny zajmować
  9. $('#'+kol[j]).attr('value','z'+j);
  10. }
  11. //sortujemy na podstawie value
  12. $('.foto').qsort({attr: "value"});
  13. SetCookie('kolejnosc', kol, 30);


parametry są przekazywane w porządku z sortowaniem nie mogę sobie poradzić.

Zamieszczam jeszcze skrypt do samego sortowania:

  1. (function(jQuery) {
  2. $.fn.qsort = function(o) {
  3. qlog = function(m) {
  4. if(window.console && console.log) {
  5. console.log(m);
  6. }else {
  7. alert(m);
  8. }
  9. };
  10. function partition(array, begin, end, pivot)
  11. {
  12. var pvt=array[pivot];
  13. array = swap(array, pivot, end-1);
  14. var store=begin;
  15. var ptr;
  16. for(ptr=begin; ptr<end-1; ++ptr) {
  17. if(array[ptr]<=pvt) {
  18. array = swap(array, store, ptr);
  19. ++store;
  20. }
  21. }
  22. array = swap(array, end-1, store);
  23. return store;
  24. };
  25. function qsort(array, begin, end)
  26. {
  27. if(end-1>begin) {
  28. var pivot=begin+Math.floor(Math.random()*(end-begin));
  29.  
  30. pivot=partition(array, begin, end, pivot);
  31.  
  32. qsort(array, begin, pivot);
  33. qsort(array, pivot+1, end);
  34. }
  35. };
  36. function quick_sort(array)
  37. {
  38. qsort(array, 0, array.length);
  39. };
  40. function swap(array, a, b) {
  41. var tmp=array[a];
  42. array[a]=array[b];
  43. array[b]=tmp;
  44. return array;
  45. };
  46. function convertToLower(arr) {
  47. var igAr = new Array();
  48. $(arr).each(function(i) {
  49. igAr.push(this.toString().toLowerCase());
  50. });
  51. return igAr;
  52. };
  53. var defaults = {
  54. order: "asc",
  55. attr: "value",
  56. ignoreCase: false,
  57. digits: false
  58. };
  59. o = $.extend(defaults, o);
  60. try{
  61. var values = new Array();
  62. var oldValues = new Array();
  63. var elems = new Array();
  64. var i = 0;
  65. $(this).each(function() {
  66. elems.push($(this));
  67. var v = $(this).attr(o.attr);
  68. if(o.digits == true) {
  69. v = parseInt(v);
  70. }
  71. oldValues.push(v);
  72. values.push(v);
  73. });
  74. if(o.ignoreCase == true) {
  75. values = convertToLower(values);
  76. oldValues = convertToLower(oldValues);
  77. }
  78. quick_sort(values);
  79. var sortedElems = new Array();
  80. $(values).each(function() {
  81. var loc = -1;
  82. if(o.digits==true) {
  83. loc = $.inArray(parseInt(this.toString()), oldValues);
  84. }else {
  85. loc = $.inArray(this.toString(), oldValues);
  86. }
  87. sortedElems.push(elems[loc]);
  88. oldValues[loc] = null;
  89. });
  90. if(o.order == "desc") {
  91. for(i = 0; i < oldValues.length - 1; i++) {
  92. $(sortedElems[i]).before($(sortedElems[i+1]));
  93. }
  94. }else {
  95. for(i = 0; i < oldValues.length - 1; i++) {
  96. $(sortedElems[i]).after($(sortedElems[i+1]));
  97. }
  98. }
  99. return $(this);
  100. }catch(e) {
  101. qlog("qsort says: There was an error while selecting elements or the options.");
  102. }
  103. }
  104. })(jQuery);


Proszę o pomoc w rozwiązaniu problemu

EDIT:

Temat do zamknięcia, skrypt traktował value jako string a nie int dlatego tak sortował.
W zamieszczonym kodzie w var defults {} wystarczy zmienić
digits: false na -> digits: true