使用数据表按2个值排序

时间:2013-07-02 16:24:30

标签: jquery sorting datatables

我需要根据看起来像这样的单个字符串的值使用数据表对表进行排序:

Number 23624 of 2010
Number 14502 of 1942
Number 10530 of 1942
Number 56020 of 2010
Number 06205 of 1997

我已拆分此单个字符串,以便我有2个数字值XXXXX和YYYY。

我需要做的是,如果YYYY相同并且在顶部有最后的YYYY,则按XXXXX排序。例如:

Number 23624 of 2010
Number 56020 of 2010
Number 06205 of 1997
Number 10530 of 1942
Number 14502 of 1942

有人可以提供建议吗?我在DataTables中使用oSort函数。

编辑: 根据要求,这是代码:

    jQuery.fn.dataTableExt.oSort['its-no-asc']  = function(a,b) {

    if(!j(a).is("a")) {
        x = a;
    } else {
        x = j(a).text();
}

if(!j(b).is("a")) {
    y = b;
} else {
    y = j(b).text();
} 

x_array = x.split(" ");
y_array = y.split(" ");
x_numbers_array = [];
y_numbers_array = [];

j.each(x_array, function(key, value) {
    orig_value = value;
    value = value.replace("Number", "");

    value = parseInt(value);
    if(j.isNumeric(value)) {
        x_numbers_array.push(value);
    }

    });

j.each(y_array, function(key, value) {
    orig_value = value;
    value = value.replace("Number", "");

    value = parseInt(value);
    if(j.isNumeric(value)) {
        y_numbers_array.push(value);
    }

});

y_no = y_numbers_array[0];
y_year = y_numbers_array[1];


x_no = x_numbers_array[0];
x_year = x_numbers_array[1];

//console.log(x_year);

if(x_year == y_year) {
    if(x_year == y_year && x_no < y_no) {
        return -1;
    } else if (x_year == y_year && x_no > y_no) {
        return 1;
    } else if (x_year == y_year) {
        return 0;
    }
} else if(x_year < y_year) {
    if(x_year < y_year && x_no < y_no) {
        return -1;
    } else if (x_year < y_year && x_no > y_no) {
        return 1;
    } else if (x_year < y_year) {
        return 0;
    }
} else if(x_year > y_year) {
    if(x_year > y_year && x_no < y_no) {
        return -1;
    } else if (x_year > y_year && x_no > y_no) {
        return 1;
    } else {
        return 0;
    }
    }

};

jQuery.fn.dataTableExt.oSort['its-no-desc']  = function(a,b) {
    //

};

j(document).ready(function() {
j('.treaty-table').dataTable({
        "sPaginationType": "full_numbers",
        "aoColumns": [
            { "sType": "its-no" },
            null,
            null,
            null,
            null
        ]
    });

});

1 个答案:

答案 0 :(得分:0)

添加此aaSorting,其中0是第一列,1是第二列,asc是升序。

阅读更多http://www.datatables.net/release-datatables/examples/basic_init/multi_col_sort.html

/* Define two custom functions (asc and desc) for string sorting */
jQuery.fn.dataTableExt.oSort['string-case-asc']  = function(x,y) {
    return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

jQuery.fn.dataTableExt.oSort['string-case-desc'] = function(x,y) {
    return ((x < y) ?  1 : ((x > y) ? -1 : 0));
};

$('.treaty-table').dataTable({
    "aaSorting": [ [0,'asc'], [1,'asc'] ],
    "sPaginationType": "full_numbers",
    "aoColumns": [
        { "sType": "its-no" },
        null,
        null,
        null,
        null
    ]
    });
});