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