根据优先级查找近似的“最近”行元素

时间:2013-06-09 00:49:29

标签: jquery

我有一个问题,因为有一个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()?

1 个答案:

答案 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);

}

在更改优先级后调用它。

现场演示:http://jsfiddle.net/eswvZ/2/