排序和重新插入元素会删除绑定的函数

时间:2011-09-19 21:49:05

标签: jquery

我需要在插入后对某些行进行排序。我现在正在做的是:

var $r = $tbody.find('tr').sort(function(a,b) { 
  return compare(taxstatusOf(a), taxstatusOf(b));
});
$tbody.empty().append($r);

这是有用的,除了,绑定到行中包含的元素的函数不再绑定(或不再触发,这相当于同样的事情)。

那么,有没有一种正确的方法来排序像这样失败的行?我必须重新绑定吗?

2 个答案:

答案 0 :(得分:2)

D'哦。

体育迷的正确答案是.detach().remove()应该删除已删除的元素(删除本地数据和绑定函数等),这对于垃圾收集等非常有用,但是当你计划重新启动时,这正是你不想要的稍后附上它们。

工作代码:

var $r = $tbody.find('tr').sort(function(a,b) { 
  return compare(taxstatusOf(a), taxstatusOf(b));
}).detach().appendTo($tbody);

(如果有人提出更好的答案,我不会在一段时间内“接受”我自己的答案。)

(我想这是我在发布问题后30秒找到了答案。现在SO上的下一个人将从我的错误中获利。)

答案 1 :(得分:0)

从您提供的示例代码看起来,您正在从DOM中删除原始元素,然后重新添加它们。由于当事件最初绑定时,DOM中不存在新排序的元素,因此它们没有绑定到它们的事件/函数。

要解决此问题,您可以使用live()delegate()分配原始函数/事件,这些函数/事件将绑定到“future”和“current”元素;或者您确实必须在排序代码中“重新绑定”事件,显然是在行$tbody.empty().append($r);之后。