Witam
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ĄZANEWystarczy 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;
},
// (...)
// editZastosowaną 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.
Ten post edytował darko 25.06.2010, 12:48:07