Czy ktoś z Was korzysta(ł) ze skryptu datatables, miał problem z sortowaniem danych zawierających polskie znaki i znalazł rozwiązanie? Chodzi o to, że polskie znaki sortowane są w kolejności po literze Z, a potrzebowałbym, żeby były sortowane zgodnie z polskim alfabetem: odpowiednio: ą wystąpiłoby po a, ć po c, ę po e itd.
ps. zarejestrowałem się na forum na stronie domowej tego skryptu i napisałem temat z podobnym pytaniem, ale wątpię czy ktokolwiek odpowie, ponieważ z wymienionych przeze mnie polskich liter wyświetliło się tylko ó, więc ludzie mogą mnie nie zrozumieć.
Pozdrawiam
ROZWIĄZANE
Wystarczy zastąpić aktualne metody sortowania oSort:
_oExt.oSort = { /* * text sorting */ "string-asc": function ( a, b ) { var x = a.toLowerCase(); var y = b.toLowerCase(); return ((x < y) ? -1 : ((x > y) ? 1 : 0)); }, "string-desc": function ( a, b ) { var x = a.toLowerCase(); var y = b.toLowerCase(); return ((x < y) ? 1 : ((x > y) ? -1 : 0)); }, // (...)
np. taki potworkiem:
_oExt.oSort = { /* * text sorting */ "string-asc": function ( a, b ) { if(a == b) return 0; var alphabet = new Array( ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł', 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż' ); var d = 0; while(a[d] == b[d]) { d++; } a_pos = 0; b_pos = 0; for(var i = 0; i < alphabet.length; i++) { if(alphabet[i] == a[d]) a_pos = i; if(alphabet[i] == b[d]) b_pos = i; } return a_pos < b_pos ? -1 : 1; }, "string-desc": function ( a, b ) { if(a == b) return 0; var alphabet = new Array( ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł', 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż' ); var d = 0; while(a[d] == b[d]) { d++; } a_pos = 0; b_pos = 0; for(var i = 0; i < alphabet.length; i++) { if(alphabet[i] == a[d]) a_pos = i; if(alphabet[i] == b[d]) b_pos = i; } return a_pos < b_pos ? 1 : -1; }, // (...)
// edit
Zastosowaną powyżej metodę można wykorzystać w sytuacji, kiedy mamy problem z sortowaniem domyślnym tablicy, która zawiera polskie znaki (domyślne sortowanie jest niezgodne z polskim alfabetem):
function mysort(a, b) { if(a == b) return 0; var alphabet = new Array( ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+', '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę', 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł', 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R', 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y', 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż' ); var d = 0; while(a[d] == b[d]) { d++; } a_pos = 0; b_pos = 0; for(var i = 0; i < alphabet.length; i++) { if(alphabet[i] == a[d]) a_pos = i; if(alphabet[i] == b[d]) b_pos = i; } return a_pos < b_pos ? -1 : 1; } var names = [ "Abramowicz Aleksander", "Zofia Nałkowska", "Świątkowską Maria", "Ćwiąkalski Marian", "Ącki Edward", "Abramowicz Aleksander", "abramowicz Aleksander", "zofia Nałkowska", "świątkowska Maria", "ćwiąkalski Marian", "ącki Edward", "abramowicz Aleksander" ]; document.write('<b>standardowy sort():</b><br/><br/>'); document.write(names.sort()); document.write('<hr><b>sort(mysort):</b><br/><br/>'); document.write(names.sort( mysort ));
rezultat zastosowania małego potwora:
standardowy sort():
Abramowicz Aleksander,Abramowicz Aleksander,Zofia Nałkowska,abramowicz Aleksander,abramowicz Aleksander,zofia Nałkowska,Ącki Edward,ącki Edward,Ćwiąkalski Marian,ćwiąkalski Marian,Świątkowską Maria,świątkowska Maria
sort(mysort):
abramowicz Aleksander,abramowicz Aleksander,Abramowicz Aleksander,Abramowicz Aleksander,ącki Edward,Ącki Edward,ćwiąkalski Marian,Ćwiąkalski Marian,świątkowska Maria,Świątkowską Maria,zofia Nałkowska,Zofia Nałkowska
ps. sorki, że aż tyle, ale może komuś się to kiedyś przyda. Pzdr.