Bootstrap Datatables按部分单元格内容排序
Bootstrap Datatables Sorting by part of cell contents
我在排序数据表时遇到问题。我有一个列显示了服务器中的玩家,比如"0/50",当我试图对该列进行排序时,它没有正确地对数字进行排序。它将按如下顺序显示:
- 0/50
- 10/30
- 2/40
- 3/30
- 4/30
- 9/25
我只想按第一个数字排序。例如:
- 0/50
- 2/40
- 3/30
- 4/30
- 9/25
- 10/30
我知道这可能可以通过将两个值分隔到各自的列中来实现,但出于美学原因,我希望它们在同一列中。
这是我的HTML布局:
<div class="row">
<div class="col-lg-12">
<table id="serverList" class="table table-striped table-bordered" cellspacing="0" width="100%">
<thead>
<tr>
<th>ID</th>
<th>Server Infomation</th>
<th>Players</th>
</tr>
</thead>
</table>
</div>
</div>
这是我的Javascript:
$(document).ready(function() {
var t = $('#serverList').DataTable();
$.getJSON('../php/queryAll.php', function(data){
var server = [];
$.each( data, function( key, val ) {
$.each( val, function( key2, val2 ) {
server.push(val2);
});
String.prototype.replaceAll = function(str1, str2, ignore){return this.replace(new RegExp(str1.replace(/(['/','!'''^'$'{'}'[']'(')'.'*'+'?'|'<'>'-'&])/g,"''$&"),(ignore?"gi":"g")),(typeof(str2)=="string")?str2.replace(/'$/g,"$$$$"):str2);}
if(server[14] > 0)
{
hostName = server[1].replaceAll('[','<span style="color:#');
server[1] = hostName.replaceAll(']',';">');
t.row.add( [server[0],server[1],server[8] + ' / ' + server[7]]).draw( false );
}
server = [];
});
$("#loader").fadeOut(250, function(){
$(".row").fadeIn(1000);
});
});
});
感谢您提供的任何帮助。
正如其他人所提到的,问题是数据表由于斜杠而使用字符串排序。
我解决这个问题的方法是在一个隐藏的跨度中添加数值。你只需要记住让所有的值都具有相同的长度,因为它们仍然会被排序为字符串。您可以通过附加0来完成此操作。
举个例子[假设我知道我的号码永远不会超过100]:
<td><span style="display:none">024</span>24/60</td>
...
<td><span style="display:none">001</span>1/60</td>
...
<td><span style="display:none">051</span>51/60</td>
...
<td><span style="display:none">033</span>33/60</td>
升序,即使是字符串,也会产生1、24、33、51
如果你在数字后面添加单词,你也可以使用这个技巧:
<td><span style="display:none">050</span>50 Hours</td>
您可以使用HTML5 data-*属性对数据表进行排序。即数据顺序属性。
<tr>
<td data-order="0">0 / 50</td>
[...]
</tr>
<tr>
<td data-order="10">10 / 30</td>
[...]
</tr>
最初显示的排序顺序是正确的。该列包含一个字符串,排序顺序基于该列中各种字符串的ASCII值。
您想要的是数字顺序排序。但是,如果显示的列包含数值,则最终会得到除法的结果。可能不是你想要的!
您可以按照@markpsmith的建议对隐藏列进行排序,也可以使用带有或不带有类型检测的DataTables排序插件进行探索:
参考:
分拣插件
相关文章:
- 使用jquery在单击时在单元格中输入值
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 可以'我不明白为什么;t将行和单元格添加到表中
- 如何在Angular中的表的所有单元格中添加链接
- 如何使用 jquery sortable 对表的所有行中的表单元格进行排序
- jQuery UI 可排序:检测表单元格中是否已包含项目
- 按英国日期对 jQuery 数据表进行排序,忽略空单元格
- 在单元格中显示另一个值时,按一个值对jqGrid进行排序
- jQuery UI可排序-排序时表格单元格丢失边框
- 如何对具有空单元格的日期列进行排序
- 通过单击另一个表中的单元格对表进行排序
- Bootstrap Datatables按部分单元格内容排序
- jqGrid-拖动一行进行排序会打乱单元格宽度
- ag网格对单元格值的排序发生了变化
- 如何在表排序器中设置固定的表宽度(不是单元格)
- Dojo数据网格:按单元格布局中的第一个值排序
- 我如何得到一个谷歌可视化表上的格式单元格值排序时呈现
- 如何在JavaScript中删除和重新排序表格中的单元格
- 使网格系统中单元格的垂直重新排序具有响应性
- SlickGrid单元格样式在排序时丢失