如果first和lastname在同一字段数据表中,则按姓氏排序

时间:2016-11-23 17:19:51

标签: javascript datatables

我有一个非常简单的数据表设置,包含几个字段和几行数据。已设置列排序。我有一个基本上是“客户名称”的字段,其中包括名字和姓氏。我想知道是否有办法更改数据表排序方法,以便根据同一列中的姓氏(或最后一个单词)进行排序。

5 个答案:

答案 0 :(得分:1)

虽然你对自定义排序功能是正确的,并且这可能是要走的路,但我提醒不要在空格上拆分名称,这会在某些情况下导致错误的结果。

DataTables允许您将任意数据附加到行,即使没有显示,您也可以对其进行排序,因此请单独附加实际的姓氏。

或者,您实际上可以单独传递名字和姓氏,然后使用自定义渲染器将它们粘贴在一起以显示在单个列中。

答案 1 :(得分:1)

另一个简单的建议是,当First-Name Last-Name需要一个列,但你想对姓氏进行排序:在WordPress或其他php应用程序中,制作' Name'列读为:

 <td>last-name first-name last-name</td>.  

然后,该列将按姓氏排序。

然后,将姓氏的第一个实例作为

 <span class="display-none">last-name</span>.

是黑客吗?也许,但快速解决问题。

答案 2 :(得分:0)

<强>更新
第一个答案是泛型排序函数,我不知何故错过了datatables标记。更新的答案适用于datatables

@Stephen P 在评论中说,您可以配置datatables对隐藏列进行排序。因此,您可以添加仅包含姓氏的隐藏列,然后按第二列(姓氏)设置第一列(全名)的排序。 我用js从全名生成姓氏列,但如果你有很多数据,你应该在服务器端做。

$(document).ready(function() {
    // find full name, get surname and add it to table as second column
    $('#example td:first-child').each(function() {
      $('<td>'+$(this).text().split(' ')[1]+'</td>').insertAfter($(this));
    });
    // configure sorting
    $('#example').DataTable( {
        'columnDefs': [
          {'orderData':[1], 'targets': [0]},
          {
            'targets': [1],
            'visible': false,
            'searchable': false
          },
        ],
    } );
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdn.datatables.net/1.10.12/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.12/css/jquery.dataTables.min.css">

<table id="example" class="display" width="100%" cellspacing="0">
        <thead>
            <tr>
                <th>Name</th>
                <th>Surname</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </thead>
        <tfoot>
            <tr>
                <th>Name</th>
                <th>Surname</th>
                <th>Position</th>
                <th>Office</th>
                <th>Age</th>
                <th>Start date</th>
                <th>Salary</th>
            </tr>
        </tfoot>
        <tbody>
            <tr>
                <td>Tiger Nixon</td>
                <td>System Architect</td>
                <td>Edinburgh</td>
                <td>61</td>
                <td>2011/04/25</td>
                <td>$320,800</td>
            </tr>
            <tr>
                <td>Garrett Winters</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>63</td>
                <td>2011/07/25</td>
                <td>$170,750</td>
            </tr>
            <tr>
                <td>Ashton Cox</td>
                <td>Junior Technical Author</td>
                <td>San Francisco</td>
                <td>66</td>
                <td>2009/01/12</td>
                <td>$86,000</td>
            </tr>
            <tr>
                <td>Cedric Kelly</td>
                <td>Senior Javascript Developer</td>
                <td>Edinburgh</td>
                <td>22</td>
                <td>2012/03/29</td>
                <td>$433,060</td>
            </tr>
            <tr>
                <td>Airi Satou</td>
                <td>Accountant</td>
                <td>Tokyo</td>
                <td>33</td>
                <td>2008/11/28</td>
                <td>$162,700</td>
            </tr>
            <tr>
                <td>Brielle Williamson</td>
                <td>Integration Specialist</td>
                <td>New York</td>
                <td>61</td>
                <td>2012/12/02</td>
                <td>$372,000</td>
            </tr>
            <tr>
                <td>Herrod Chandler</td>
                <td>Sales Assistant</td>
                <td>San Francisco</td>
                <td>59</td>
                <td>2012/08/06</td>
                <td>$137,500</td>
            </tr>
        </tbody>
    </table>

答案 3 :(得分:0)

如果要在数据库层中处理此问题,则需要在查询的orderby子句中执行Substring方法,语法将根据您使用的数据库而有所不同。

MSSQL:

ORDER BY SUBSTRING(COLUMN, CHARINDEX(' ', COLUMN), 50);

MYSQL:

ORDER BY Substring(COLUMN, Position(' ' IN COLUMN), 50);

答案 4 :(得分:0)

这几天的方法是简单地将data-sort属性附加到您的<td>,例如:

<td data-sort="Johnson Dwayne">Dwayne "The Rock" Johnson</td>

数据表将以您期望的方式自动处理此问题。作为参考,请参阅他们的documentation on HTML5 data-* attributes