首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用客户端HTML表排序分组行

问用客户端HTML表排序分组行
EN

Stack Overflow用户
提问于 2010-03-24 16:57:22
回答 2查看 9.7K关注 0票数 7

是否有任何现有的表排序库,或者是否有配置制表器的方法来每两行排序一次?另外,是否有更好的方法来表示我的表,这样标准行排序就可以工作了。

我有一个html表,它看起来像这样

代码语言:javascript
复制
<table>
    <thead>
        <tr>
            <th>Header 1</th>
            <th>Header 2</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Some Data: 1</td>
            <td>Some More Data:1 </td>
        </tr>
        <tr>
            <td colspan="2">Some text about the above data that puts it in context and visually spans under both of the cells above so as not to create a weird looking table</td>
        </tr>

        <tr>
            <td>Some Data: 2</td>
            <td>Some More Data: 2</td>
        </tr>
        <tr>
            <td colspan="2">Some text about the above data 2 set that puts it in context and visually spans under both of the cells above so as not to create a weird looking table</td>
        </tr>           

    </tbody>
</table>

我正在寻找一种方法来对表进行排序,使表按数据行排序,,但--带colspan的行--随其数据一起移动,而不是单独排序。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-12-01 03:49:36

有人为tablesorter开发了此功能。请查看此页:

http://blog.pengoworks.com/index.cfm/2008/3/28/Finished-jQuery-Tablesorter-mod-for-Collapsible-Table-Rows

您所需要做的就是给次行一个类“展开子”(这是可配置的)。

做你需要的事。

票数 2
EN

Stack Overflow用户

发布于 2010-03-24 17:16:26

在逻辑上(不一定是语义上)可以将相关行组合在一起的唯一元素是<tbody>,因为拥有多个<tbody>元素是有效的。但是,在本例中,由于实现tablesorter的方式,这对您没有任何帮助。

我可以在tablesorter源代码appender中看到一个无文档化的配置选项,它允许您指定一个函数,该函数接受正在排序的表,并指定一个数据结构,其中包含要附加到其中的已排序行,以实现所需的重新排序,但我看不到任何选项,这些选项允许您在排序时配置它所查看的行。

如果拼图的第一部分就在这里,您可以使用它来限制考虑对实际数据行进行排序的行,并使用appender选项提供一个函数,该函数追加每个已排序的行及其下一行兄弟。

编辑:,这是一个您需要的额外部分的快速而讨厌的实现,还有一个用法示例:

对buildCache方法的修改,从第195行一直到jquery.tablesorter.js:

代码语言:javascript
复制
var rowsToSort = table.config.rowsToSort ? table.config.rowsToSort(table) : table.tBodies[0].rows;
var totalRows = rowsToSort.length,
    totalCells = (rowsToSort[0] && rowsToSort[0].cells.length) || 0,
    parsers = table.config.parsers,
    cache = {row: [], normalized: []};

您的示例表适用于我的用法:

代码语言:javascript
复制
$(document).ready(function() {
    $.tablesorter.defaults.debug = true;

    // Select every other row as sorting criteria
    $.tablesorter.defaults.rowsToSort = function(table)
    {
      var rows = [];
      var allRows = table.tBodies[0].rows;
      for (var i = 0, l = allRows.length; i < l; i += 2)
      {
        rows.push(allRows[i]);
      }
      return rows;
    };

    // Append each row and its next sibling row
    $.tablesorter.defaults.appender = function (table, rows)
    {
      for (var i = 0, l = rows.length; i < l; i++)
      {
        var row = rows[i][0];
        var buddyRow = $(row).next("tr").get(0);
        table.tBodies[0].appendChild(row);
        table.tBodies[0].appendChild(buddyRow);
      }
    };

    $("table").tablesorter();
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2509690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档