JQuery tablesorter插件 - 修改行后更新排序

4
我使用tablesorter 2.0,并通过ajax更新单元格的值。调用后,我需要重新排序行,但$('#thisTable').trigger('update')无法帮助我。
我处理单元格内部的标记,但这不应该是问题。
 $('#thisTable').tablesorter({
   textExtraction: function(node) {
     return node.getElementsByTagName('input')[0].value; 
   }
 });

任何帮助都将不胜感激。
-- Kree
4个回答

3
您可以在表格排序器的文档中找到答案,docs。您需要触发另一个事件sorton

是的,我看了它,但我不知道在更新之前哪一列被排序了... sorton需要将排序列作为参数。 - kree
1
е®һйҷ…зҡ„жҺ’еәҸеҲ—еӯҳеӮЁеңЁпјҡ$('#thisTable').get(0).config.sortListдёӯгҖӮ еҰӮжһңжңӘе®ҡд№үпјҢеҲҷеҸҜд»Ҙж·»еҠ дёҖдәӣй»ҳи®ӨжҺ’еәҸгҖӮ - Beniamin

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);
});

这应该是tablesorter源代码中的一个可接受的功能。你尝试在Github上做出贡献了吗?不确定sorton的触发方式。可能有更直接的方法? - mwallisch

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]);放在setTimout块中,并延迟50ms。但这只是一个解决方法,而不是正确的修复方法。有人能建议正确的修复方法吗? - Aditya

0
关于“update”事件的实现, 它会在1毫秒的超时后执行更新。 这个函数应该在表格排序器中重写,或者使用回调函数。
$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);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接