jQuery tablesorter — сортировка столбца со смешанным текстом и числами

У меня есть таблица со столбцом данных, который представляет собой смешанный текст и числа. Я сортирую его с помощью jQuery и плагина tablesorter. Данные, которые не будут сортироваться правильно, — это теги оборудования, например, «AHU-1», «AHU-2», «AHU-10». Проблема в том, что при данных примерных значениях AHU-10 будет размещен между AHU-1 и AHU-2. Я обнаружил, что принудительная сортировка по цифрам не решает проблему.

Вот мой вопрос: 1) Кто-нибудь знает о существующем синтаксическом анализаторе, который я могу использовать в этой ситуации? Если его нет, мне нужно будет написать свой собственный синтаксический анализатор, и в этом случае 2) Как мне написать синтаксический анализатор? Должен ли я попытаться перевести каждую букву в число и выполнить числовую сортировку? Это моя первоначальная мысль.

Еще одна вещь, я не знаю наверняка, что дефис будет разделителем. «AHU-1» также может быть «AHU1», или «AHU 1», или «AHU:1», или чем-то еще.


person Jacob    schedule 28.01.2010    source источник


Ответы (2)


Вам нужно написать свой собственный парсер. То, что вы ищете, называется "естественный сортировать". Существует множество алгоритмов естественной сортировки JavaScript. Я не смог найти ни одного готового плагина для tablesorter, но в гугле их довольно много.

person glomad    schedule 28.01.2010
comment
Это хорошая информация, спасибо. Иногда с Google вам просто нужно знать правильный термин (например, естественная сортировка). Я дам вам знать, что я найду. - person Jacob; 30.01.2010

Предполагая, что все, что вам нужно сделать, это отсортировать любую строку шаблона AAA-1 как AAA-01, вы можете сделать следующее:

var myTextExtraction = function(node)  
{  
    // extract data from markup and return it  
    return node.childNodes[0].childNodes[0].innerHTML
               .replace(/([A-Z]{3}-)(\d)/,'$1-0$2'); 
} 
$(document).ready(function() 
    { 
        $("#myTable").tableSorter( {textExtraction: myTextExtraction} ); 
    } 
); 
person Sam Hasler    schedule 28.01.2010
comment
Я начал с вашего кода, а затем прошел через кучу итераций, чтобы попытаться заставить его работать, но ничего из того, что я сделал, не решило проблему. Я собираюсь изучить алгоритмы естественной сортировки, предложенные ithcy, и двигаться дальше. - person Jacob; 30.01.2010