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?
我简化了计算。你可以在这个小提琴中找到真正的计算:
我想根据计算结果对表格进行排序。我该如何处理这个问题?
谢谢。
答案 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');