2013-09-17 2 views
1

У меня есть таблица данных, упорядоченная по рангу, которая может быть введена через поле ввода.Custom datatable sort

Ранг - это однозначное число от 1 до 9, или оно может быть пустым. Я хочу, чтобы пробелы всегда отображались в конце списка всякий раз, когда я сортирую.

Смотрите пример JSFiddle: http://jsfiddle.net/afEHc/

Если я использую:

"aoColumns": [ { "sSortDataType": "dom-text" }, null ] 

Он работает подхватывает новые значения, но порядок неверно. Это пробелы должны всегда появляться в конце.

Если я использую:

"aoColumns": [{"sType": "data-rank"}, null ] 

Он работает правильно сначала, но потом ломается, когда я или сортировать по другой колонке первым или добавить значение в столбце ранга.

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

ответ

1

Да, к сожалению, у вас не может быть $.fn.dataTableExt.afnSortData['data-rank'], по крайней мере, того, что я знаю.

Но вы можете использовать dom-text как вы пробовали, и установить sType быть data-rank:

"aoColumns": [ 
    { "sSortDataType": "dom-text", "sType": "data-rank" }, 
    null 
] 

новая функция пользовательского сортировки:

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "data-rank-asc": function (a, b) { 
     a = (a==='') ? 99 : a; b = (b==='') ? 99 : b;  
     return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }, 
    "data-rank-desc": function (a, b) { 
     a = (a==='') ? -1 : a; b = (b==='') ? -1 : b;  
     return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    } 
}); 

И теперь он работает! Бланки всегда появляются в конце, как по восходящей, так и по убыванию, а также при вводе новых значений в поля ввода.

раздвоенная скрипка: http://jsfiddle.net/s29aB/

Для уточнения пользовательского рода: Я просто только набор заготовок/«» - значений будет -1 на сортировку по возрастанию, 99 при сортировке по убыванию.

+0

Спасибо. Я упустил из виду тот факт, что sType и sSortDataType могут быть использованы, и карта меня отключила. – Aaron