【问题标题】:Sorting multiple rows linked with one another (fiddle examples included)对彼此链接的多行进行排序(包括小提琴示例)
【发布时间】:2016-06-27 22:10:22
【问题描述】:

如何使用sorttable.js 对多行进行排序(带有colspan 的行,链接目标排序行

我尝试稍微修改源以支持多行,但它破坏了包含在 Arrayrow 数据中的数据的基本排序。这里是sorttable.js (my attempt at multiple rows)的修改版

我正在努力实现的目标

<table id="data_table" class="sortable">
    <colgroup>
        <col clas="item1" />
        <col class="item2" />
        <col class="item3" />
    </colgroup>
    <thead>
        <th class="item1">Item 1</th>
        <th class="item2">Item 2</th>
        <th class="item3">Item 3</th>
    </thead>
    <tbody>
        <tr id="row-item-0" class="item_row" data-sorttable_row_key="0" data-sorttable_original="true" >
            <td class="item1">Data 1</td>
            <td class="item2">Data 2</td>
            <td class="item3">Data 3</td>
        </tr>
        <tr id="row-item-0-1" class="item_row"  data-sorttable_row_key="0" data-sorttable_original="false" >
            <td colspan="3">
                Details regarding Data 1,2,3
            </td>
        </tr>
        <tr id="row-item-1" class="item_row" data-sorttable_row_key="1" data-sorttable_original="true" >
            <td class="item1">Data 4</td>
            <td class="item2">Data 5</td>
            <td class="item3">Data 6</td>
        </tr>
        <tr id="row-item-1-1" class="item_row"  data-sorttable_row_key="1" data-sorttable_original="false" >
            <td colspan="3">
                Details regarding Data 4,5,6
            </td>
        </tr>
        <tr id="row-item-2" class="item_row" data-sorttable_row_key="2" data-sorttable_original="true" >
            <td class="item1">Data 1</td>
            <td class="item2">Data 2</td>
            <td class="item3">Data 3</td>
        </tr>
        <tr id="row-item-2-1" class="item_row"  data-sorttable_row_key="2" data-sorttable_original="false" >
            <td colspan="3">
                Details regarding Data 1,2,3
            </td>
        </tr>
        <tr id="row-item-3" class="item_row" data-sorttable_row_key="3" data-sorttable_original="true" >
            <td class="item1">Data 4</td>
            <td class="item2">Data 5</td>
            <td class="item3">Data 6</td>
        </tr>
        <tr id="row-item-3-1" class="item_row"  data-sorttable_row_key="3" data-sorttable_original="false" >
            <td colspan="3">
                Details regarding Data 4,5,6
            </td>
        </tr>
    </tbody>
</table>

Sortable Multiple Rows (jsfiddle)(看起来它可以工作,因为它可以携带 linked row 与排序,但它不是因为 sort 完全不正确)

Sortable Multiple Rows (using single rows, doesn't work) (jsfiddle)

Pastebin for Sortable Code used in above JSFiddles

支持什么

<table id="data_table" class="sortable">
    <colgroup>
        <col clas="item1" />
        <col class="item2" />
        <col class="item3" />
    </colgroup>
    <thead>
    <tr>
        <th class="item1 sorttable_alpha">Item 1</th>
        <th class="item2 sorttable_alpha">Item 2</th>
        <th class="item3 sorttable_alpha">Item 3</th>
    </tr>
    </thead>
    <tbody>
        <tr id="row-item-0" class="item_row">
            <td class="item1">Data 1</td>
            <td class="item2">Data 2</td>
            <td class="item3">Data 3</td>
        </tr>
        <tr id="row-item-1" class="item_row">
            <td class="item1">Data 4</td>
            <td class="item2">Data 5</td>
            <td class="item3">Data 6</td>
        </tr>
      <tr id="row-item-2" class="item_row">
            <td class="item1">Data 1</td>
            <td class="item2">Data 2</td>
            <td class="item3">Data 3</td>
        </tr>
        <tr id="row-item-3" class="item_row">
            <td class="item1">Data 4</td>
            <td class="item2">Data 5</td>
            <td class="item3">Data 6</td>
        </tr>
    </tbody>
</table>

Sortable using the default code (jsfiddle)

Pastebin for above JsFiddle(包含对原始版本的轻微修改,以便在cells 中提供更好的 ELEMENT 支持)。

理想情况下,我在这个问题的答案中寻找的是:

  • 图书馆做我正在寻找的,
  • 我的 sorrtable.js 修改中的错误解决方案。

【问题讨论】:

  • @RickHitchcock 这些只是示例表,我已经更新了参考以提高可读性。
  • @RickHitchcock 我添加了一些示例 JSFiddles

标签: javascript sorting html-table sorttable.js


【解决方案1】:

您可以完全避免编辑 sorttable.js 脚本。

相反,在表格的thead 上创建一个点击事件,这会将 colspan 行移动到位 sorttable.js 已对所有行进行了排序:

$('.sortable thead').click(function() {
  var sortable = $(this).closest('.sortable');

  sortable.find('tr:has(td[colspan])').each(function() {
    var key = $(this).data('sorttable_row_key'),
        link = sortable.find('tr:not(:has(td[colspan]))[data-sorttable_row_key=' + key + ']');

    $(this).insertAfter(link);
  });
});

我使用过 jQuery,因为您在 Fiddle 中链接到它。如果您更喜欢原生 JavaScript 解决方案,请告诉我。

Working Fiddle

【讨论】:

  • 感谢 rick :) 很棒的解决方案
猜你喜欢
  • 2019-03-05
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 2021-12-09
  • 1970-01-01
  • 2015-11-08
相关资源
最近更新 更多