我有一个问题,因为有一个jQuery nearest()函数,这不是我的意思。 (注意,我有点打字,因为我去问这个问题,我很想知道如何以最好的方式解决这个问题)
我在表中有一些对象,按“优先级”编号排序。此优先级是1到1024之间的任意数字,并且不绑定到对象的id。下表中显示的行“id”是对象的id,就像它在数据库中一样。
<table>
<tr id="5" priority="1"> .. </tr>
<tr id="2" priority="10"> .. </tr>
<tr id="7" priority="12"> .. </tr>
<tr id="8" priority="13"> .. </tr>
</table>
现在我可以使用ajax请求更改优先级。目前,要显示生成的订单,用户必须重新加载页面(这有点违背了ajax的目的)。我想要的是使用before()
或after()
功能将所选行移动到新位置。
所以我想在元素2之前移动元素7.所以我将它的优先级设置为1到9之间的东西。假设我选择优先级5.现在我需要找到正确的位置。作为一个简单的解决方案:从列表的开头开始,向上移动直到找到“漂亮”的位置。哪个,看起来像一个排序问题,但只有一个插入? jQuery中是否有一些函数或功能可以在一个插入中执行此操作?
修改
这有效:
var the_row_I_need = $('table').filter(function() {
return parseInt($(this).attr('priority')) > parseInt(value)
}).first();
the_row_I_need.before( row_to_move );
但它仍然使用了相当多的过滤,所以我认为它仍然遍及整个列表。有没有比这更好的方法或使用sort()?
答案 0 :(得分:3)
你可以创建一些像
这样的功能function reorder()
{
var table = $('#tbl'),
rows = $('#tbl tr').detach();
rows.sort(function(a, b) {
return $(a).attr('priority') - $(b).attr('priority');
});
table.append(rows);
}
在更改优先级后调用它。