2016-05-06 2 views
1

Мой сценарий:Сортировка DataTable JQuery исключая пробела в текстовых полях

Я пытаюсь сортировать дату столбец таблицы, которая использует DataTable JQuery плагин, и я сортировал таблицу, но с текстовыми полями, имеющими бело- пространства. Следовательно, когда я сортирую «ASC», то сначала будут заполняться поля с текстовыми полями. Этого не должно быть. Я хочу сортировать таблицу, исключая пустые текстовые поля.

Я попытался следующий код:

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
"customdatesort-pre": function (formElement) { 
    // returns the "weight" of a cell value 
    var r, x; 
    var a = $(formElement).val(); 

    if (a === null || a === "") { 
     // for empty cells: weight is a "special" value which needs special handling 
     r = false; 
    } else { 
     // otherwise: weight is the "time value" of the date 
     x = a.split("/"); 
     r = +new Date(+x[2], +x[1] - 1, +x[0]); 
    } 
    //console.log("[PRECALC] " + a + " becomes " + r); 
    return r; 
}, 
"customdatesort-asc": function (a, b) { 
    // return values are explained in Array.prototype.sort documentation 
    if (a === false && b === false) { 
     // if both are empty cells then order does not matter 
     return 0; 
    } else if (a === false) { 
     // if a is an empty cell then consider a greater than b 
     return 1; 
    } else if (b === false) { 
     // if b is an empty cell then consider a less than b 
     return -1; 
    } else { 
     // common sense 
     return a - b; 
    } 
}, 
"customdatesort-desc": function (a, b) { 
    if (a === false && b === false) { 
     return 0; 
    } else if (a === false) { 
     return 1; 
    } else if (b === false) { 
     return -1; 
    } else { 
     return b - a; 
    } 
} 
}); 

проблемы я нашел с этим кодом:

В приведенном выше коде, вы можете увидеть "customdatesort-pre": function (formElement). Параметр formElement принимает только пустые значения, а не текстовые поля с некоторыми значениями даты.

Что мне нужно:

Мне нужно сортировать столбцы даты исключающие пустые текстовые поля.

ответ

1

С пользовательской сортировкой pre obsoletes asc и desc. Если вы определили pre, то методы asc и desc никогда не будут вызываться. pre предназначен как функция оптимизации, он вызывается один раз для каждой ячейки, а затем внутренний сортировщик будет использовать этот результат для сортировки. См. this thread on datatables.net.

Вместо этого вы могли бы поместить pre код функции вне пользовательского рода буквальным и назвать его изнутри asc и desc методы:

customdatesortPre = function (formElement) { 
    //customdatesort-pre code 
} 
jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "customdatesort-asc": function (a, b) { 
    a = customdatesortPre(a), b = customdatesortPre(b); 
    ... 
    }, 
    "customdatesort-desc": function (a, b) { 
    a = customdatesortPre(a), b = customdatesortPre(b); 
    ... 
    } 
}); 

демо ->http://jsfiddle.net/9j9gpsrn/

+0

Это работает для меня. Большое спасибо приятелю. – Vikash

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