2015-09-04 54 views
0

我试图用预先计算的序列排序表。用预先计算的序列重新排序表

所以在下面的例子中,5个项目将被移动到第一个,然后第三个项目将是第二个,依此类推。

我似乎无法操纵sort来实现这一点,是否有可能使用sort

var seq = [5, 3, 2, 1, 4]; 

var table = $('.table'); 
var rows = $('tbody > tr', table); 

rows.sort(function(a, b){ 
    return 0; 
}); 

rows.each(function(index, row){ 
    table.append(row); 
}); 
+0

你需要有该行本身,以配合在东西' seq'数组。 – Barmar

回答

1

不要使用sort,只是环比seq阵列,收集行:

$("#button").click(function() { 
 
    var seq = [5, 3, 2, 1, 4]; 
 

 
    var table = $('table'); 
 
    var rows = $('tbody > tr', table); 
 

 
    var new_rows = []; 
 
    $.each(seq, function() { 
 
    new_rows.push(rows.eq(this - 1)); // subtract 1 because `eq()` is 0-based 
 
    }); 
 
    $.each(new_rows, function() { 
 
    table.append(this); 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>a</td> 
 
    </tr> 
 
    <tr> 
 
    <td>b</td> 
 
    </tr> 
 
    <tr> 
 
    <td>c</td> 
 
    </tr> 
 
    <tr> 
 
    <td>d</td> 
 
    </tr> 
 
    <tr> 
 
    <td>e</td> 
 
    </tr> 
 
</table> 
 
<button id="button">Click to reorder</button>

+0

非常感谢!我细化了它,因为我实际上并不需要它在数组中,'$ .each(seq,function(){ta​​ble.append(rows.eq(this-1));});' – jdawg

+0

That won'因为当你将该行附加到表中时,它会改变它后面所有行的位置。 – Barmar

+0

啊,是的,伟大的一点!感谢您的帮助。 – jdawg