Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ROZWIĄZANE]Skrypt DataTables z datatables.net
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
darko
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ĄZANE

Wystarczy zastąpić aktualne metody sortowania oSort:

[JAVASCRIPT] pobierz, plaintext
  1. _oExt.oSort = {
  2. /*
  3. * text sorting
  4. */
  5. "string-asc": function ( a, b )
  6. {
  7. var x = a.toLowerCase();
  8. var y = b.toLowerCase();
  9. return ((x < y) ? -1 : ((x > y) ? 1 : 0));
  10. },
  11.  
  12. "string-desc": function ( a, b )
  13. {
  14. var x = a.toLowerCase();
  15. var y = b.toLowerCase();
  16. return ((x < y) ? 1 : ((x > y) ? -1 : 0));
  17. },
  18. // (...)
[JAVASCRIPT] pobierz, plaintext


np. taki potworkiem:

[JAVASCRIPT] pobierz, plaintext
  1. _oExt.oSort = {
  2. /*
  3. * text sorting
  4. */
  5. "string-asc": function ( a, b )
  6. {
  7. if(a == b)
  8. return 0;
  9.  
  10. var alphabet = new Array(
  11. ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+',
  12. '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9',
  13. 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę',
  14. 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł',
  15. 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R',
  16. 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y',
  17. 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż'
  18. );
  19.  
  20. var d = 0;
  21. while(a[d] == b[d]) {
  22. d++;
  23. }
  24. a_pos = 0; b_pos = 0;
  25.  
  26. for(var i = 0; i < alphabet.length; i++)
  27. {
  28. if(alphabet[i] == a[d])
  29. a_pos = i;
  30.  
  31. if(alphabet[i] == b[d])
  32. b_pos = i;
  33. }
  34. return a_pos < b_pos ? -1 : 1;
  35. },
  36.  
  37. "string-desc": function ( a, b )
  38. {
  39. if(a == b)
  40. return 0;
  41.  
  42. var alphabet = new Array(
  43. ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+',
  44. '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9',
  45. 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę',
  46. 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł',
  47. 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R',
  48. 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y',
  49. 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż'
  50. );
  51.  
  52. var d = 0;
  53. while(a[d] == b[d]) {
  54. d++;
  55. }
  56. a_pos = 0; b_pos = 0;
  57.  
  58. for(var i = 0; i < alphabet.length; i++)
  59. {
  60. if(alphabet[i] == a[d])
  61. a_pos = i;
  62.  
  63. if(alphabet[i] == b[d])
  64. b_pos = i;
  65. }
  66. return a_pos < b_pos ? 1 : -1;
  67. },
  68. // (...)
[JAVASCRIPT] pobierz, plaintext


// 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):
[JAVASCRIPT] pobierz, plaintext
  1. function mysort(a, b)
  2. {
  3. if(a == b)
  4. return 0;
  5. var alphabet = new Array(
  6. ' ', '~', '`', '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '-', '_', '=', '+',
  7. '0' ,'1', '2', '3', '4', '5', '6', '7', '8', '9',
  8. 'a', 'A', 'ą', 'Ą', 'b', 'B', 'c', 'C', 'ć', 'Ć', 'd', 'D', 'e', 'E', 'ę', 'Ę',
  9. 'f', 'F', 'g', 'G', 'h', 'H', 'i', 'I', 'j', 'J', 'k', 'K', 'l', 'L', 'ł', 'Ł',
  10. 'm', 'M', 'n', 'N', 'ń', 'Ń', 'o', 'O', 'ó', 'Ó', 'p', 'P', 'q', 'Q', 'r', 'R',
  11. 's', 'S', 'ś', 'Ś', 't', 'T', 'u', 'U', 'v', 'V', 'w', 'W', 'x', 'X', 'y', 'Y',
  12. 'z', 'Z', 'ź', 'Ź', 'ż', 'Ż'
  13. );
  14. var d = 0;
  15. while(a[d] == b[d]) {
  16. d++;
  17. }
  18. a_pos = 0; b_pos = 0;
  19. for(var i = 0; i < alphabet.length; i++)
  20. {
  21. if(alphabet[i] == a[d])
  22. a_pos = i;
  23.  
  24. if(alphabet[i] == b[d])
  25. b_pos = i;
  26. }
  27. return a_pos < b_pos ? -1 : 1;
  28. }
  29.  
  30. var names = [
  31. "Abramowicz Aleksander", "Zofia Nałkowska", "Świątkowską Maria", "Ćwiąkalski Marian", "Ącki Edward", "Abramowicz Aleksander",
  32. "abramowicz Aleksander", "zofia Nałkowska", "świątkowska Maria", "ćwiąkalski Marian", "ącki Edward", "abramowicz Aleksander"
  33. ];
  34.  
  35. document.write('<b>standardowy sort():</b><br/><br/>');
  36. document.write(names.sort());
  37. document.write('<hr><b>sort(mysort):</b><br/><br/>');
  38. document.write(names.sort( mysort ));
[JAVASCRIPT] pobierz, plaintext


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.
rafal999
Witam, Wątek z 2010, ale problem z sortowaniem chyba wciąż aktualny. W aktualnej wersji jest kilka modyfikacji w kodzie i Twoje rozwiązanie nie chce mi działać. Darko czy mozesz zrobic update?
darko
Witam,

przyznam, że nie mam wystarczająco dużo czasu, aby zapoznać się z kodem najnowszej wersji skryptu. Proszę dokładnie opisać na konkretnym przykładzie swój problem wraz z załączonym kodem.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.