我需要在插入后对某些行进行排序。我现在正在做的是:
var $r = $tbody.find('tr').sort(function(a,b) {
return compare(taxstatusOf(a), taxstatusOf(b));
});
$tbody.empty().append($r);
这是有用的,除了,绑定到行中包含的元素的函数不再绑定(或不再触发,这相当于同样的事情)。
那么,有没有一种正确的方法来排序像这样失败的行?我必须重新绑定吗?
答案 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);
之后。