【问题标题】:JQuery tablesorter appended data not sortingJQuery tablesorter附加数据未排序
【发布时间】:2010-12-27 15:16:38
【问题描述】:

我也尝试使用 tablesorter 插件 (http://tablesorter.com) 将数据附加到表中 我使用以下代码:

<table id="sortme" border="1" style="width: 200px;">             
<thead>
    <tr>
        <th>first name</th>
        <th>last name</th>
        <th>age</th>
    </tr>
</thead>
<tbody>
       <tr>
          <td>will</td>
          <td>smith</td>
          <td>1</td>
      </tr> 
...................
</tbody>
</table>
<a href="#" id="test">Click me!</a>

还有:

$(document).ready(function() {
 var i = 5;
 $("#sortme").tablesorter({
     sortList: [[2,0]]         
 }); 
 $("#test").click(function() {
     $("#sortme tbody").append('<tr><td>NEW</td><td>NEW</td><td>'+(i++)+'</td></tr>');
     $("#sortme").trigger("update");
     var s = [[2,0]];
     $("#sortme").trigger("sorton",[s]);
     return false;
 });
});

问题是附加的行停留在顶部,为什么? 参见示例:http://jsfiddle.net/jmU3Z/8/

【问题讨论】:

    标签: javascript jquery tablesorter


    【解决方案1】:

    以防其他人偶然发现这一点。

    到处理“sorton”事件时,DOM 尚未分配 table.config.parsers。 “sorton”事件处理需要包装在 1 毫秒的超时时间中。

    将 jquery.tablesorter.js(~803 行)中现有的“sorton”绑定替换为以下内容:

    }).bind("sorton", function (e, list) {
        var me = this;
        setTimeout(function () {
            $(this).trigger("sortStart");
            config.sortList = list;
            // update and store the sortlist
            var sortList = config.sortList;
            // update header count index
            updateHeaderSortCount(me, sortList);
            // set css for headers
            setHeadersCss(me, $headers, sortList, sortCSS);
            // sort the table and append it to the dom
            appendToTable(me, multisort(me, sortList, cache));
        }, 1);
    

    【讨论】:

      【解决方案2】:

      你的问题是[s]。您的排序参数已经是一个数组,只需将 var 传递给它,而不是数组中的 var。

      $("#sortme").trigger("sorton",s); 
      

      为我工作,FF4。

      【讨论】:

      • 有效但产生错误:[1] 未定义 tablesorter.com/jquery.tablesorter.js Row: 573
      • 我想我找到了。在 tablesorter 构造中,他们调用buildHeaders 来获取他们可以排序的列列表,然后调用buildCache 进行排序。当您调用更新时,它只会构建缓存(而不是重新实例化表)。也许这是一个错误或未记录的功能。无论如何,重新调用构造 as seen in the newest version 将让它重新构建缓存并正确排序。也很可能值得向创作者提及。 ;-)
      • 是的,可行,但不是很漂亮 =/ 嗯,它是一个解决方案,而且修补更新代码也没有那么难。谢谢
      • 这个答案是错误的有两个方面。 (1) 插件需要一个嵌套数组,因此触发器中的 s 需要被包装 - 请参阅 this example。 (2) cmets中分享的demo第二次重新初始化插件,所以点击表头进行排序最终会将表格排序两次,恢复到原来的排序。再次初始化它,它将排序 3x,等等。试试这个 updated demo(更新为链接到 tablesorter 插件并添加 cmets)。
      猜你喜欢
      • 1970-01-01
      • 2012-12-23
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多