【问题标题】:Sorting dataTables columns through a custom sortId通过自定义 sortId 对 dataTables 列进行排序
【发布时间】:2016-03-21 11:32:10
【问题描述】:

我正在使用jQuery DataTables 1.9.4 来呈现数据。我有新的自定义类型要显示在单元格中,并且为每种类型添加自定义排序功能将非常棘手且难以维护,因为显示格式不容易与表示的值相关联。例如,显示格式可以是3 oranges, 4 apples,那么排序的值就是7

我能想到的最佳解决方案是为每个单元格提供一个sortId 属性,该属性将是一个整数,并且一列的单元格将通过此sortId 进行排序。

before
<td>3 oranges, 4 apples</td>

after
<td sortId="7">3 oranges, 4 apples</td>

我在网上搜索,它似乎不是 dataTables 的功能。我怎么能做到这一点?

注意sortId 不一定是&lt;td&gt; 的属性,任何其他隐藏的解决方案都可以,只要不需要那么多字符。


data-sort 属性绝对是我想要的,谢谢!

我尝试添加这个属性有点失败(data-sortdata-order)。

  • 我是否需要调整表格中的任何内容才能使其正常工作?

  • 我使用的是 2012 版本的数据表 (v1.9.4),此版本中是否已实现此功能? jquery.dataTable.js 文件中的文本搜索显示 data-orderdata-sort 字符串的匹配为零。

【问题讨论】:

    标签: javascript jquery sorting datatables


    【解决方案1】:

    jQuery 数据表 1.10+

    如果您想使用td 元素属性,data-sort 属性定义了用于对 HTML 源数据进行排序的值。

    <td data-sort="7">3 oranges, 4 apples</td>
    

    有关更多信息和演示,请参阅this example

    或者,您可以使用columns.render 选项,但这更适合 Ajax 或 JavaScript 来源的数据。

    jQuery 数据表 1.9

    在数据排序时使用aoColumnDefs.mRender为单元格生成内容,如下所示:

    var table = $('#example').dataTable({
        "aoColumnDefs": [{
            "aTargets": [0],
            "mRender": function(data, type, full) {
                if (type === "sort") {
                    var numbers = data.match(/\d+/g);
    
                    data = 0;
                    for (var i = 0; i < numbers.length; i++) {
                        data += Number(numbers[i]);
                    }
                }
                return data;
            }
        }]
    });
    

    有关代码和演示,请参阅 this jsFiddle

    jQuery DataTables 1.9 的替代解决方案是使用隐藏元素并在那里提供排序值。请注意,这些值将作为字符串进行比较,因此如有必要,请在数字中添加零填充。

     <tr>
         <td><span style="display:none">0007</span> 1 apple, 6 oranges</td>
     </tr>
     <tr>
         <td><span style="display:none">0005</span> 3 apples, 2 oranges</td>
     </tr>
     <tr>
         <td><span style="display:none">0006</span> 5 apples, 1 orange</td>
     </tr>
    

    有关代码和演示,请参阅 this jsFiddle

    【讨论】:

    • 正交数据也是一个很好的解决方案 -> datatables.net/examples/ajax/orthogonal-data.html ...根据type 返回不同值的列渲染也可以。
    • @davidkonrad, columns.render 不适用于此处,尽管我在回答中提到了它。您如何想象解析3 oranges, 4 apples 并使用columns.render 生成7
    • 循环遍历 /^\d+/.match(s) 并将找到的所有数字相加 - 以 7 或字符串中的任何数字结尾。
    • 感谢 Gyrocode.com 数据排序绝对是我需要的。但是我不能让它轻松工作,请参阅我的额外问题
    • @davidkonrad,看来 OP 使用 1.9,渲染是这里唯一的选择,感谢提示将其用于替代解决方案。
    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 2019-09-28
    • 2020-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多