在DataTable中,如何按部分值对列进行排序?

时间:2015-09-17 01:46:55

标签: jquery datatable

我正在使用DataTables(jQuery的Table插件)作为我网页设计的工具。但是我遇到了一个问题,因为我想按部分值对列进行排序。 例如,有一个名为“Speaker”的列,其值为“Prof。Lin”,“Yu博士”,“陈教授”等。对列进行排序时,顺序为:

1.“余博士” 2.“陈教授” 3.“林教授”。

我想用他们的名字而不是第一个字母排序,这意味着排序为:

1.“陈教授” 2.“林教授”
3.“余博士”
另一个例子是“平均(5%偏差)”栏,其值为“78.0(-2.5~2.5)”,“90.5(-1.5~1.5)”,“130.0(-3.0~3.0)”,依此类推。对列进行排序时,顺序为:

1.“130.0(-3.0~3.0)”
2.“78.0(-2.5~2.5)”
3.“90.5(-1.5~1.5)”。

我想按它们的平均值而不是第一个字母排序(DataTable认为列值是字符串而不是浮点数),这意味着排序为:

1.“78.0(-2.5~2.5)”
2.“90.5(-1.5~1.5)”
3.“130.0(-3.0~3.0)”

在我的数据库中,有两列用于存储数据,例如“title”和“forst_name”,“average”和“bias”。因此,很容易将<td></td>标记中的两个部分分开 是否可以使用DataTables按部分值对列进行排序?

1 个答案:

答案 0 :(得分:1)

我为Title排序做了sample code。您可以完成Average列的其余部分。

标记

<table id="report">
    <thead>
        <tr>
            <th>Title</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Dr. Yu</td>
        </tr>
        <tr>
            <td>Prof. Chen</td>
        </tr>
        <tr>
            <td>Prof. Lin</td>
        </tr>
    </tbody>
</table>

的JavaScript / jQuery的

$(document).ready(function () {
    function getValue(titleValue) {
        return titleValue.replace(/^Prof\.\s+|^Dr\.\s+/g, '');
    }

    jQuery.fn.dataTableExt.oSort['title-asc'] = function (a, b) {
        var x = getValue(a);
        var y = getValue(b);
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    };

    jQuery.fn.dataTableExt.oSort['title-desc'] = function (a, b) {
        var x = getValue(a);
        var y = getValue(b);
        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
    };

    $('#report').dataTable({"aoColumns": [
            { "sType": "title" }
        ]});
});

感谢this post