Jquery如何根据计算对表进行排序

时间:2014-04-24 20:00:59

标签: javascript jquery sorting

var TableToSort = $("#units_table");
var ItemsWithTheData = $("#units_table .row_marker"); //Gives tbodys

var SomeCalculation = ItemsWithTheData.find("tr td:eq(0)").text() / 5;

//Sort table based on SomeCalculation result?

我简化了计算。你可以在这个小提琴中找到真正的计算:

http://jsfiddle.net/z6Rd8/8/

我想根据计算结果对表格进行排序。我该如何处理这个问题?

谢谢。

2 个答案:

答案 0 :(得分:1)

要对元素进行排序,一个好方法是detach元素,然后在内存中对它们进行排序,然后再次attach

分离:https://api.jquery.com/detach/

追加:https://api.jquery.com/append/

这是一个更新的小提琴:http://jsfiddle.net/z6Rd8/9/

$("#filterdoeldorp").click(function(){

    var $table = $('#units_table');

    var from = $("#from").val().split("|");

    var rows = $table.find(".row_marker").detach();

    var metric = function(row) {
        var to = $(row).find('tr td:eq(0)').text().match(/\d+\|\d+/).toString().split("|");
        return Math.sqrt(Math.pow(parseInt(to[0])-parseInt(from[0]),2)+Math.pow(parseInt(to[1])-parseInt(from[1]),2));
    };

    rows.sort(function(a,b){
        var metric_a = metric(a);
        var metric_b = metric(b);
        return metric_a < metric_b ? -1 : metric_a > metric_b ? 1 : 0;
    });

    $.each(rows, function() {
        $table.append($(this));
    });

})

答案 1 :(得分:1)

另一种方法(感谢joe Frambach的公制功能):

var from = $("#from").val().split("|");
var metric = function (row) {
    var to = $(row).find('tr td:eq(0)').text().match(/\d+\|\d+/).toString().split("|");
    return Math.sqrt(Math.pow(parseInt(to[0]) - parseInt(from[0]), 2) + Math.pow(parseInt(to[1]) - parseInt(from[1]), 2));
};

$(".row_marker").detach().sort(function (a, b) {
    $(a).attr("data-metric", metric(a));//optional, remove if you want
    $(b).attr("data-metric", metric(b));//optional, remove if you want
    return metric(b) - metric(a);

}).appendTo('#units_table');