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
var kolejnosc = $("#sort_wstaw").val();
if(kolejnosc != ''){
//wyciągamy informację z ciasteczka i deserializujemy
var kol
= kolejnosc
.split(','); alert(kol);
for(var j=0;j<kol.length;j++){
//ustawiamy value elementom wg. tego jaką kolejność powinny zajmować
$('#'+kol[j]).attr('value','z'+j);
}
//sortujemy na podstawie value
$('.foto').qsort({attr: "value"});
parametry są przekazywane w porządku z sortowaniem nie mogę sobie poradzić.
Zamieszczam jeszcze skrypt do samego sortowania:
(function(jQuery) {
$.fn.qsort = function(o) {
qlog = function(m) {
if(window.console && console.log) {
console.log(m);
}else {
alert(m);
}
};
function partition
(array, begin
, end, pivot
) {
var store=begin;
var ptr;
for(ptr=begin; ptr<end-1; ++ptr) {
++store;
}
}
return store;
};
{
if(end-1>begin) {
var pivot
=begin
+Math
.floor(Math
.random
()*(end
-begin
));
pivot
=partition
(array, begin
, end, pivot
);
qsort
(array, begin
, pivot
); }
};
function quick_sort
(array) {
};
function swap
(array, a
, b
) { };
function convertToLower(arr) {
$
(arr
).each(function(i
) { igAr.push(this.toString().toLowerCase());
});
return igAr;
};
var defaults = {
order: "asc",
attr: "value",
ignoreCase: false,
digits: false
};
o = $.extend(defaults, o);
try{
var values
= new Array(); var oldValues
= new Array(); var i = 0;
$
(this
).each(function() { elems.push($(this));
var v = $(this).attr(o.attr);
if(o.digits == true) {
v = parseInt(v);
}
oldValues.push(v);
values.push(v);
});
if(o.ignoreCase == true) {
values = convertToLower(values);
oldValues = convertToLower(oldValues);
}
quick_sort(values);
var sortedElems
= new Array(); $
(values
).each(function() { var loc = -1;
if(o.digits==true) {
loc = $.inArray(parseInt(this.toString()), oldValues);
}else {
loc = $.inArray(this.toString(), oldValues);
}
sortedElems.push(elems[loc]);
oldValues[loc] = null;
});
if(o.order == "desc") {
for(i = 0; i < oldValues.length - 1; i++) {
$(sortedElems[i]).before($(sortedElems[i+1]));
}
}else {
for(i = 0; i < oldValues.length - 1; i++) {
$(sortedElems[i]).after($(sortedElems[i+1]));
}
}
return $(this);
}catch(e) {
qlog("qsort says: There was an error while selecting elements or the options.");
}
}
})(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
Ten post edytował pablo_83 16.09.2010, 10:44:02