2014-09-16 3 views
1

Я использую jquery tablesorter. Сортировщик по таблице, имеющий порядковый номер по порядку, специальный символ и алфавиты. Мне нужно сортировать как специальный символ первый, номер и алфавиты.Jquery tablesorter настраивать параметр для сортировки

Проверить этот URL на третьей колонке (животное)

jsfiddle.net/Mottie/abkNM/325/ 

Любая помощь по этому вопросу?

+0

Какой особый символ вы имеете в виду? – Mottie

+0

любой особый символ .... – Karthik

+0

http://jsfiddle.net/abkNM/4099/ проверьте этот URL, столбец животных ... так что вы можете получить идею ... здесь сначала это число, затем специальный символ, а затем алфавит ... Но мой приоритет подобен специальному символу, числу и алфавиту .... – Karthik

ответ

1

По умолчанию естественная сортировка разбивает содержимое на блоки для сравнения, но эти блоки задаются «кусками» текстовых символов и чисел. Когда встречается нетекстовый/числовой символ, он не разбивается.

Таким образом, в вашем демо значения «#Elephant» и «0Zebra» своего рода нарушает эти значения следующим образом:

#Elephant => [ '#Elephant' ] 
0Zebra => [ '0', 'Zebra' ] 

, когда сравнение делается это видит «#Elephant» является числом, но «0» является числовым, поэтому на основе ascii comparison нечетные (предполагается, что в алфавитном порядке) значения больше числовых значений; и таким образом «#Elephant» сортируется после «0Zebra».

Я знаю, что вы не просили объяснений, но самый простой способ обойти это - изменить сортировщик. Используйте простой текст сортировщик вместо (demo):

$('table').tablesorter({ 
    textSorter: { 
     2: $.tablesorter.sortText 
    } 
}); 

Update: Если вы хотите специфической сортировки, вам необходимо изменить порядок значения ASCII. Я настроил this demo, который специфичен для данных, он меняет только первый символ.

var reorderAscii = function(x){ 
    if (x === '') { return x; } 
    var v = x.charCodeAt(0), 
     z = x.charCodeAt(0); 
    if (z > 90 && z < 97) { 
     // move [\]^_` to replace ABCDEF 
     v = v - 26; 
    } else if (z > 122 && z < 127) { 
     // move {|}~ to replace GHIJ 
     v = v - 52; 
    } else if (z > 47 && z < 58) { 
     // moveto replace KLMNOPQRST 
     v = v + 27; 
    } 
    return z !== v ? String.fromCharCode(v) + x.slice(1) : x; 
}; 

$('table').tablesorter({ 
    theme: 'jui', 
    headerTemplate: '{content}{icon}', 
    // ignoreCase must = true 
    ignoreCase: true, 
    textExtraction: function(node, table, cellIndex){ 
     var t = $.trim($(node).text().toLowerCase()); 
     return cellIndex === 2 ? reorderAscii(t) : t;  
    }, 
    textSorter: function (a, b) { 
     if (a == b) { return 0; } 
     if (a == '') { return 1; } 
     if (b == '') { return -1; } 
     return a > b ? 1 : -1; 
    }, 
    widgets: ['uitheme', 'zebra', 'columns'], 
    widgetOptions: { 
     zebra: [ 
      "ui-widget-content even", 
      "ui-state-default odd"] 
    } 
}); 

Я забыл упомянуть, что при использовании любого другого сортировщика рядом с буквенно-цифровым сортировщика, пустая клетка и клетка сортировки строки игнорируются. Мне нужно включить это в документацию.

+0

Отличный ji ... Спасибо за описание, я подумал, что то же самое по сравнению с ascii для восхождения ... Но посмотрите это http://jsfiddle.net/abkNM/4121 /. Теперь пустое место сверху, а некоторые символы появляются после числа/алфавитов. Я использовал пустой: «нижний» в заголовке. Но пока это не работает. Теперь мне нужен символ spl, число, алфавиты (нижняя и верхняя параллель) и пробел/пусто. В моем приложении я должен использовать везде не одну колонку. Жду вашего ответа ... Ваша идея оценена .... – Karthik

+0

См. Мой обновленный демо-пример и пример кода. – Mottie

Смежные вопросы