2015-03-15 2 views
3

Im использование символов tablesorter Эквиваленты распространяются, как описано в http://mottie.github.io/tablesorter/docs/example-locale-sort.html.Tablesorter: сортировка чешского алфавита

Я подготовил аналогичные расширения для чешских символов, но сортировка не работает для некоторых символов - f. е. \ u017d

$.extend($.tablesorter.characterEquivalents, { 
"a" : "\u00e1", // á 
"A" : "\u00c1", // Á 
"c" : "\u010d", // č 
"C" : "\u010c", // Č 
"d" : "\u010f", // ď 
"D" : "\u010e", // Ď 
"e" : "\u00e9\u011b", // éě 
"E" : "\u00c9\u011a", // ÉĚ 
"i" : "\u00ed", // í 
"I" : "\u00cd", // Í 
"n" : "\u0148", // ň 
"N" : "\u0147", // Ň 
"o" : "\u00f3", // ó 
"O" : "\u00d3", // Ó  
"r" : "\u0159", // ř 
"R" : "\u0158", // Ř 
"s" : "\u0161", // š 
"Š" : "\u0160", // Š 
"t" : "\u0165", // ť 
"T" : "\u0164", // Ť   
"u" : "\u00fa\u016f", // úů 
"U" : "\u00da\u016e", // ÚŮ 
"y" : "\u00fd", // ý 
"Y" : "\u00dd", // Ý  
"z" : "\u017e", // ž 
"Z" : "\u017d" // Ž 
}); 

В приведенном здесь примере http://jsfiddle.net/Gk43v/18/ есть вопрос, который Ž находится перед Z что неправильно.

Но на моих страницах Ž находится в середине таблицы, что совершенно неправильно.

+0

Мои страницы здесь http://www.sl-skole.cz/eshop.html –

ответ

1

Работает. «Z» был заменен во внутреннем кеше.

Хотя вы, возможно, потребуется включить true флаг выполнить глубокий удлиняет:

$.extend(true, $.tablesorter.characterEquivalents, { ... }); 

Заканчивать это демо (вид, чтобы увидеть значения столбцов в окне Firebug): http://jsfiddle.net/Gk43v/19/


Обновление: Хорошо, проблема представляется фактическим порядком сортировки. Проблема в том, что сортировка по умолчанию выполняется с использованием значения ASCII символов, так что Š и Ž сортируются после A-Z без какой-либо эквивалентной замены символов. Функция заменяет «S» для «Š» и «Z» для «Ž», делая их эквивалентными и неотличимыми от их несогласных букв.

Если вы действительно хотите, то, чтобы поддерживать необходимый порядок символов, вам нужно использовать другой текстовый сортировщик, как sugarjs, который позволяет установить порядок сортировки:

Array.AlphanumericSortOrder = 'AaÁáBbCcDdÐðEeÉéĘęFfGgHhIiÍíJjKkLlMmNnOoÓóPpQqRrSsTtUuÚúVvWwXxYyÝýZzÞþÆæÖö'; 

Вы можете использовать textSorter option для использовать вид сахара массив для этого столбца - here is a demo showing an Icelandic sort

$("table").tablesorter({ 
    theme : 'blue', 
    ignoreCase : false, 
    textSorter : { 
    // alphanumeric sort from sugar (http://sugarjs.com/arrays#sorting) 
    // for the first column (zero-based index) 
    0 : Array.AlphanumericSort 
    } 
}); 

Update # 2: Поскольку чешский алфавит является немного более сложным, у ou'll нужно заменить «CH» на placholder, потому что Sugar разрешает только одиночные символы в определении порядка сортировки.

Таким образом, в этом примере, я заменил «CH» с «ае» (updated demo)

$(function() { 
    Array.AlphanumericSortOrder = 'AaÁáÄäBbCcČčDdĎďEeÉéĚěFfGgHhÆæIiÍíJjKkLlMmNnŇňOoÓóÖöPpQqRrŘřSsŠšTtŤťUuÚúŮůÜüVvWwXxYyÝýZzŽž'; 
    Array.AlphanumericSortIgnoreCase = true; 
    // see https://github.com/andrewplummer/Sugar/issues/382#issuecomment-41526957 
    Array.AlphanumericSortEquivalents = {}; 

    // replace "Ch" and "ch" with a placeholder... it can be anything 
    // in this example, I'm replacing ch with "æ" and Ch or CH with "Æ" 
    // these characters have been added to the Array.AlphanumericSortOrder 
    // between "h" and "I" - according to http://en.wikipedia.org/wiki/Czech_orthography 
    var replaceCH = function(node) { 
     return $(node).text() 
      .replace(/(Ch|CH)/g, '\u00c6') 
      .replace(/ch/g, '\u00e6'); 
    }; 

    $("table").tablesorter({ 
     theme: 'blue', 
     // table = table object; get config options from table.config 
     // column is the column index (zero-based) 
     ignoreCase: false, 
     textExtraction : { 
      1: replaceCH, 
      3: replaceCH 
     }, 
     textSorter: { 
      1 : Array.AlphanumericSort, // alphanumeric sort from sugar (http://sugarjs.com/arrays#sorting) 
      3 : Array.AlphanumericSort 
     } 
    }); 
}); 

Я пытаюсь использовать функцию characterEquivalents заменить строку, но и в настоящее время поддерживает только одиночные замены символов (Я исправлю это в будущей версии), поэтому на данный момент я использую настраиваемую функцию textExtraction.

Вторая проблема, о которой вы сообщили, может быть решена путем запуска "update" method в таблице после завершения вызова ajax и отображения таблицы.

$('table').trigger('update'); 
+0

Благодарим за ответ. Извините, но я до сих пор не получил, как добиться правильного порядка писем. В примере его ** Á, Č, É, Š, S, Ů, Ž, Z ** и правильный порядок являются ** Á, Č, É, S, Š, Ů, Z, Ž **. –

+0

См. Мой обновленный ответ. – Mottie

+0

Спасибо за вашу выдающуюся помощь, теперь она выглядит намного лучше в демонстрации http://jsfiddle.net/Gk43v/21/. К сожалению, я все еще сталкиваюсь с двумя оставшимися проблемами. Первый prbolem - это письмо ** CH **, которое является особенным в чешском (вы можете найти его здесь http://en.wikipedia.org/wiki/Czech_orthography), и я не уверен, как его реализовать в порядке сортировки. Seccond большая проблема заключается в том, что на моих страницах, где я импортирую данные через AJAX из XML, AlphanumericSortOrder не работает. (см. здесь http://www.sl-skole.cz/eshop_test.php) –