gpt4 book ai didi

javascript - 需要更智能的 jQuery 表排序功能

转载 作者:行者123 更新时间:2023-12-03 01:53:08 24 4
gpt4 key购买 nike

我正在使用另一个 stackoverflow 问题中的以下代码:

$('th').click(function(){
var table = $(this).parents('table').eq(0)
var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
this.asc = !this.asc
if (!this.asc){rows = rows.reverse()}
for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index)
return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB)
}
}
function getCellValue(row, index){ return $(row).children('td').eq(index).text() }
table, th, td {
border: 1px solid black;
}
th {
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr><th>Country</th><th>Pick</th><th>Size</th></tr>
<tr><td>France</td><td>2</td><td>25</td></tr>
<tr><td><a href=#>spain</a></td><td>-</td><td></td></tr>
<tr><td>Lebanon</td><td>1</td><td>-17</td></tr>
<tr><td>Argentina</td><td>DH</td><td>100</td></tr>
<tr><td>USA</td><td>-</td><td>-6</td></tr>
</table>

这对于大多数数据都很有效。我的问题是“选择”栏。我希望它能够排序,使其看起来像这样:

Pick
1
2
DH
-
-

我假设这是我需要修改的比较器函数。我如何修改它,以便它基本上总是将“-”放在表格底部,然后将数字从最低到最高排序,并在数字正下方使用“DH”?这是对函数的一个非常简单的添加吗?或者是大量的自定义代码?

最佳答案

您只需向比较器添加一些自定义逻辑即可。

我在下面的代码片段中更改的唯一部分是函数比较器(索引)内容。

$('th').click(function(){
var table = $(this).parents('table').eq(0)
var rows = table.find('tr:gt(0)').toArray().sort(comparer($(this).index()))
this.asc = !this.asc
if (!this.asc){rows = rows.reverse()}
for (var i = 0; i < rows.length; i++){table.append(rows[i])}
})
function comparer(index) {
return function(a, b) {
var valA = getCellValue(a, index), valB = getCellValue(b, index);

if (valA === "-") valA = Number.MAX_SAFE_INTEGER;
if (valB === "-") valB = Number.MAX_SAFE_INTEGER;
if (valA === "DH") valA = Number.MAX_SAFE_INTEGER - 1;
if (valB === "DH") valB = Number.MAX_SAFE_INTEGER - 1;

return $.isNumeric(valA) && $.isNumeric(valB) ? valA - valB : valA.toString().localeCompare(valB)
}
}
function getCellValue(row, index){ return $(row).children('td').eq(index).text() }
table, th, td {
border: 1px solid black;
}
th {
cursor: pointer;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tr><th>Country</th><th>Pick</th><th>Size</th></tr>
<tr><td>France</td><td>2</td><td>25</td></tr>
<tr><td><a href=#>spain</a></td><td>-</td><td></td></tr>
<tr><td>Lebanon</td><td>1</td><td>-17</td></tr>
<tr><td>Argentina</td><td>DH</td><td>100</td></tr>
<tr><td>USA</td><td>-</td><td>-6</td></tr>
</table>

关于javascript - 需要更智能的 jQuery 表排序功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50339659/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com