2010-10-26 132 views
4

我使用tablesorter 2.0,并使用ajax更新单元格的值。在调用之后,我需要重新命令行,但是$('#thisTable')。trigger('update')对我没有帮助。JQuery tablesorter插件 - 修改行后更新排序

我在处理单元格内的标记,但它不是问题。

$('#thisTable').tablesorter({ 
    textExtraction: function(node) { 
    return node.getElementsByTagName('input')[0].value; 
    } 
}); 

任何帮助,将不胜感激。

- 克里

回答

3

您可以在表中分拣docs答案。您必须触发另一个事件sorton

+0

是的,我读过它,但我不知道,哪一列在更新之前被排序... sorton需要排序列作为参数。 – kree 2010-10-26 08:49:30

+1

实际的排序列存储在:$('#thisTable')。get(0).config.sortList。如果它未定义,则可以添加一些默认排序。 – Beniamin 2010-10-26 09:32:32

+0

谢谢!就是这样,我需要的! :) – kree 2010-10-26 10:31:26

1

这是我的代码

//append some content to the tbody 
$('table').trigger('update');  
var $sort = $('table').get(0).config.sortList; 
$("table").trigger("sorton",[$sort]); 

后,我添加一些行表体以上被调用。我能够看到$ sort值,但触发器函数没有对新添加的行进行排序。

+1

我启用了表分拣机的调试模式。更新触发器更新表缓存,但sorton触发器正在对先前缓存的数据进行排序。所以新数据没有被排序。为了使它们同步化,我把$(“table”)。trigger(“sorton”,[$ sort]);在setTimoutblock中延迟50ms。但这只是一个解决方法,但这不是我想的正确解决方法。有人可以提出适当的解决办法吗? – Aditya 2012-01-23 07:45:58

1

我已经在源代码中有一个小的改变。我已经向更新事件处理程序添加了一个参数来请求排序。

$("#MyTable").trigger('update')将照常工作。

$("#MyTable").trigger('update', true)将在更新后要求排序。

$this.bind("update", function (e, sort) { 
    var me = this; 
    setTimeout(function() { 
     // rebuild parsers. 
     me.config.parsers = buildParserCache(
     me, $headers); 
     // rebuild the cache map 
     cache = buildCache(me); 
     // ADDED 
     if (sort) $(me).trigger('sorton', [me.config.sortList]); 
    }, 1); 
}); 
+0

这应该是tablesorter源的一个可接受的功能。你有没有尝试在github上贡献这个?不确定关于sorton的触发。可能有更直接的方法? – mwallisch 2015-07-01 20:22:06

0

关于以“更新”活动的实施, 它执行1毫秒的超时后更新。 eather这个函数应该在表格分拣机中重写,使用回调进行读取。

$this.bind("update", function() { 
    var me = this; 
    setTimeout(function() { 
    // rebuild parsers. 
    me.config.parsers = buildParserCache(
    me, $headers); 
    // rebuild the cache map 
    cache = buildCache(me); 
}, 1);