Сортировка и фильтрация json jQuery
Есть реляционная таблца данных. Данные я получаю в json. Эти данные отображаются на клиенсткой стороне таким образом что каждая строка стаблицы отображается в форме произвольно свестанных блоков <div> и ячеек <li>.
Есть так же в клиентском интерфейсе кнопки, которые отвечают за отбор и сортировку. Надо реализовать механизм, который позволит, скрывать/отображать часть блоков и изменять порядок следования. Признаки, по которым происходит сортировка и фильтр хранятся в значениях столбцов таблицы данных. Вариант, каждый раз выполнять ajax запрос и получать новый json набор данных - не подходит. Подскажите, как реализовать механизм, возможно на jQuery, для манипуляции даннми на клиентской части. Заранее спасибо. |
Не знаете как сортировать данные ?
В нете не мало инфы. Цитата:
jQuery Plugin - Dynamic Sorting, Paging and Filtering Product list / Portfolio. JQuery sort() |
Нашел такой код
var v = 'id';
$.fn.sort = function() {
return this.pushStack( [].sort.apply( this, arguments ), []);
};
function sortAlpha(a,b){
return a[v] * 1 < b[v] * 1 ? 1 : -1;
};
json.sort(sortAlpha);
Мне надо както модифицировать компаратор таким образом, чтобы он принимал 3 аргумент, ключ в json, по которому надо сравнивать объекты. Чтобы вызо выглядил таким образом
json.sort(sortAlpha,'id');
function sortAlpha(a,b,v){
return a[v] * 1 < b[v] * 1 ? 1 : -1;
};
как это сделать ? |
function sortBy (field, rev, fn) {
field = field || false;
rev = rev ? rev === true ? -1 : 1 : 1;
fn = fn || false;
return function (a, b) {
if (field) {
a = a[field];
b = b[field];
}
if (fn) {
a = fn(a);
b = fn(b);
}
if (a < b) { return rev * -1; }
if (a > b) { return rev; }
return false;
}
}
field - поле по которому идёт сортировка, rev - реверсия массива, fn - функция callback для доп действий Пример вызова:
myArray.sort(sortBy("name"));
ЗЫ: данный вариант не совсем "правильный", т.к. результирующая функция замыкается на внешней, т.е. потенциальна течёт память, но это можно исправить, если например обе функции сделать методом одного объекта, а связь между ними - через публичные свойства. |
kobezzza,
Спасибо. Просветлело )) |
| Часовой пояс GMT +3, время: 01:48. |