jQuery - плагин для обработки данных - проблема сортировки - PullRequest
5 голосов
/ 03 октября 2011

Я использую плагин DataTables от http://datatables.net.
Сам по себе плагин очень полезен, но у меня есть большая проблема с ним.

Возвращает список адресов для некоторых поисков в следующем формате.

1 Main Street
12 Main Street
13 Main Street
14 Main Street
...
2 Main Street
3 Main Street
4 Main Street
5  Main Street
..

Как видите, сортировка не соответствует ожиданиям. Вернет все числа, начиная с 1 eg, 11, 111, 1111 до 2.

Кто-нибудь из вас имеет опыт работы с плагином?

  • знаете, чтобы решить эту проблему сортировки?
  • или знаете способ отключить сортировку при первом запуске (отображать данные в том виде, в каком они поступают из БД)?

Любые предложения приветствуются.

Ответы [ 2 ]

4 голосов
/ 03 октября 2011

Для решения этой конкретной проблемы вы можете использовать плагин Natural-sort для таблиц данных.Читайте все об этом в http://datatables.net/plug-ins/sorting (поиск "Естественная сортировка").

Короче говоря, если вы скачали и встроенную функцию naturalSort, вы затем определяетедескриптор сортировки для таблиц данных, таких как:

jQuery.fn.dataTableExt.oSort['natural-asc']  = function(a,b) {
    return naturalSort(a,b);
};

jQuery.fn.dataTableExt.oSort['natural-desc'] = function(a,b) {
    return naturalSort(a,b) * -1;
};

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

$('#example').dataTable( {
    "aoColumns": [
        null,
        null,
        { "sType": "natural" }
]
});

Вот рабочая скрипка http://jsfiddle.net/zhx32/14/

Примечание: кажется, что вы, фактически, количество элементов на "aoColumns"msgstr "должно быть равно количеству столбцов в таблице, иначе вы получите ошибку.Нулевое значение указывает, что плагин datatables должен использовать метод сортировки по умолчанию для этого столбца.

3 голосов
/ 03 октября 2011

Вы должны использовать плагин сортировки для чего-то вроде этого:

jQuery.fn.dataTableExt.oSort['num-html-asc']  = function(a,b) {
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

jQuery.fn.dataTableExt.oSort['num-html-desc'] = function(a,b) {
    var x = a.replace( /<.*?>/g, "" );
    var y = b.replace( /<.*?>/g, "" );
    x = parseFloat( x );
    y = parseFloat( y );
    return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};

и затем указать этот тип в aoColumns

        "aoColumns": [
            null,
            null,
            null,
            { "sType": "num-html" },
            null
        ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...