【问题标题】:how to get current sort order from tablesorter plugin?如何从 tablesorter 插件获取当前排序顺序?
【发布时间】:2009-12-23 23:52:11
【问题描述】:

我刚刚开始使用 Christian Bach 出色的 TableSorter 插件,我需要获取列的当前排序方向。我有几列:

  • 身份证
  • 姓名
  • 类别

使用

将 ID 和名称设置为不可排序
headers:    { 0: {sorter: false}, 1: {sorter: false} }

我在 Name 上添加了一个单击处理程序,以便它在 Category 列上触发排序事件。使用示例“Sort table using a link outside the table”,我可以获取 Name 标头来触发 Category 排序——但它是硬编码的,以单向排序。

如何让它查看 Category 列当前排序的当前方向,并按相反方向排序? (我可以处理翻转值;由于排序顺序是 0 或 1,我可以对值进行异或运算以得到相反的值,例如 var sort; sort ^= sort;——我的问题是如何获取当前值。

下面是当前在 Name 列上设置点击处理程序的代码:

$("#nameCol").click(function() {
    var sorting = [[2, 0]];     /* sort 3rd col (Category) descending */
    $("#SearchResults").trigger("sorton", [sorting] );  /* SearchResults is the ID of the sortable table */
    return false;               /* cancel default link action on a#nameCol */
});

谢谢!

【问题讨论】:

    标签: jquery jquery-plugins tablesorter


    【解决方案1】:

    您可以使用内置的 sortEnd 事件来获取 sortOrder,如下所述:https://stackoverflow.com/a/4150187/363155

    $('#yourtableId').on('sortEnd', function(event) {
        // Prints the current sort order to the console
        console.log(event.target.config.sortList);
    });
    

    【讨论】:

      【解决方案2】:

      您还可以在其他任何地方(例如,在您的函数中,ajax 的开头,..)捕获它,并且仅在需要时而不是在每次点击时捕获它,这样开销会更少:

      lastSortList=$("#mytable")[0].config.sortList;
      

      以及在 ajax 更新后对其进行排序的示例:

      $("#mytable").trigger("sorton", [lastSortList]);
      

      记得在正确的范围内声明第一行。

      【讨论】:

      • 这个解决方案比公认的答案要好得多。
      【解决方案3】:

      我写了一个函数来保存当前的排序顺序。这在表从头开始重建的情况下帮助了我。

      function SaveSortOrder(tablename) {
      //returns an array of a tablesorter sort order
      var hdrorder = new Array();
      var hdrs = $("#" + tablename + " th");
      var arrayindex = 0;
      hdrs.each(function (index) {
          if ($(this).hasClass('headerSortDown')) {
              hdrorder[arrayindex] = [index, 0];
              arrayindex++;
          }
          else if ($(this).hasClass('headerSortUp')) {
              hdrorder[arrayindex] = [index, 1];
              arrayindex++;
          }       
      });
      
      return hdrorder;
      }
      

      【讨论】:

        【解决方案4】:

        表头应该都调用同一个点击事件:

        $('th').click(function() {
             handleHeaderClick(this);
        });  
        

        然后单击处理程序应添加/删除适用的类。

        function handleHeaderClick(hdr) {
            if ($(hdr).hasClass('headerSortDown') == true) {
                $(hdr).removeClass('headerSortDown');
                $(hdr).addClass('headerSortUp');
            } else if ($(hdr).hasClass('headerSortUp') == true) {
                $(hdr).removeClass('headerSortUp');
                $(hdr).addClass('headerSortDown');
            } else {
                $('th', myTable).removeClass('headerSortUp headerSortDown');
                $(hdr).addClass('headerSortDown');
            }
            doSomething();
        };
        

        我希望这会有所帮助。

        【讨论】:

        • 当然可以!我专注于通过一些 API 调用来获取状态,但它在类属性中表示......只是测试一下。非常RESTy。谢谢!
        猜你喜欢
        • 2013-01-14
        • 2023-03-20
        • 1970-01-01
        • 2020-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-05
        相关资源
        最近更新 更多