我有一个非常简单的数据表设置,有几个字段和几行数据。列排序已设置。我有一个基本上是“客户名称”的领域,并且它的名字和最后都是。我想知道是否有方法来改变数据表排序方法,以便根据同一列中的姓氏(或最后一个词)进行排序。如果名字和姓氏在同一字段数据表中,按姓氏排序
回答
更新
首先答案是通用的排序功能,我莫名其妙地错过了datatables
标签。更新的答案是datatables
。
Like @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>
虽然您对自定义排序功能是正确的,但这可能是一种解决方法,我谨慎反对将空间名称拆分,这会在某些情况下导致错误结果。 DataTables允许您将任意数据附加到行,并且即使它没有显示,您也可以对其进行排序,因此请单独附上实际的姓氏。或者,您实际上可以分别传递姓名和姓氏,然后使用自定义渲染器将它们粘贴在一起以显示在单个列中。 –
@StephenP,你应该添加你的评论作为答案。 –
@ Gyrocode.com - 是的,谢谢,已经做到了。 –
如果你想处理这个在DB层,你将需要查询的排序依据子句中执行子串的方法,语法会有所不同,你使用的是什么DB 。
MSSQL:
ORDER BY SUBSTRING(COLUMN, CHARINDEX(' ', COLUMN), 50);
MYSQL:
ORDER BY Substring(COLUMN, Position(' ' IN COLUMN), 50);
当你说得对,自定义排序功能,这可能是要走的路,我告诫不要对空间拆分的名字,在某些情况下会导致错误的结果。
DataTables允许您将任意数据附加到行,并且即使它未显示,也可以按此排序,因此请单独附上实际的姓氏。或者,您实际上可以分别传递姓名和姓氏,然后使用自定义渲染器将它们粘贴在一起以显示在单个列中。
另一个简单的建议是,当名字姓氏需要单列时,但您想对姓氏排序:在WordPress或其他php应用程序中,将“姓名”列设置为:
<td>last-name first-name last-name</td>.
然后,该列将按姓氏排序。
然后,把最后的名字的第一个实例为
<span class="display-none">last-name</span>.
它是一个黑客?也许,但这个问题的解决方案很快。
- 1. 名字和姓氏中的Split姓氏
- 2. 按姓氏和名字排序c#
- 3. 更改姓氏,名字到姓氏,FirstInitial
- 4. 仅提取姓氏名字,姓氏
- 5. 将单个字段分隔成名称,姓氏和姓氏
- 6. SQL Server - 在名字和姓氏字段中搜索姓名
- 7. MySQL如何在全名字段中按姓氏排序?
- 8. 用名字和姓氏查找姓名
- 9. 单名文本框中的名字和姓氏的姓氏
- 10. 好友按姓按姓氏排序?
- 11. 从表格中提取姓氏,姓氏和姓氏
- 12. 按姓氏和姓氏排序,然后显示给用户
- 13. 提取名字和姓氏
- 14. MVC User.Identity.Name,姓氏和名字
- 15. 搜索名字和姓氏
- 16. 如何在搜索栏中按名字和姓氏排序 - Sqlite
- 17. :姓名,姓氏:姓名
- 18. OpsHub - 用户映射 - 名字姓氏vs(Azure)姓氏,名字
- 19. 按姓氏排序名称数组?
- 20. 从姓氏和姓氏字段中获取最短的唯一名称
- 21. 按字母顺序排列的姓氏
- 22. 在sqlite中分割姓氏和姓氏
- 23. Javascript Array按姓氏排序
- 24. 按姓氏排序结构
- 25. “姓氏,名字” - >“名字姓氏”中的序列化字符串
- 26. 将姓名字段拆分成姓氏和名字
- 27. 在Java中按姓氏和名字排序对象的ArrayList
- 28. 如何按姓氏排序姓名列表
- 29. 在Python中解析姓氏从姓名中解析姓氏
- 30. 排到姓氏
[为jQuery数据表实现自定义sSortType和排序函数]可能的重复(http://stackoverflow.com/questions/20759814/implementing-a-custom-ssorttype-and-sort-function-for-jquery-datatables ) – mascoj