使用 javascript 函数自定义排序 HTML Table
Custom sort HTML Table using javascript function
我正在关注@charlietfl 在 上给出的答案。
table 好像不适合我。
我的代码:
var custom_sort =['ABC','MNO','XYZ'];
var $rows = $('tr:gt(0)').detach().sort(function(a, b){
var aSrcIdx =custom_sort.indexOf( $(a).find('td:last').text());
var bSrcIdx = custom_sort.indexOf( $(b).find('td:last').text());
return aSrcIdx > bSrcIdx;
});
$('#mytable').append($rows);
table, td, th { border: 1px solid black; }
#mytable {
width: 100%;
border-collapse: collapse;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id='mytable'>
<tr>
<th>ID</th>
<th>Date</th>
<th>Source</th>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>80</td>
<td>2011-07-08</td>
<td>ABC</td>
</tr>
<tr>
<td>94</td>
<td>2013-06-05</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>75</td>
<td>2012-01-01</td>
<td>ABC</td>
</tr>
</table>
如您所见,我希望能够按 ABC,MNO,XYZ,ABC,MNO,XYZ
的顺序排列
为什么代码不起作用?
如何自定义排序我的 table 看起来像:
ID
Date
Source
80
2011-07-08
ABC
94
2013-06-05
MNO
50
2013-06-05
XYZ
75
2012-01-01
ABC
50
2012-01-01
MNO
50
2012-01-01
XYZ
const customSort = ['ABC','MNO','XYZ'];
const rows = [...$('tr:gt(0)').detach()];
const iMax = rows.length * customSort.length;
const sortedRows = [];
for (let i = 0; i < iMax; i++) {
const targetValue = customSort[i % customSort.length];
const targetRowIndex = rows.findIndex(row => {
return $(row).find('td:last').text() === targetValue;
});
if (targetRowIndex !== -1) {
const targetRow = rows.splice(targetRowIndex, 1)[0];
sortedRows.push(targetRow);
}
}
sortedRows.push(...rows);
$('#mytable').append(sortedRows);
table, td, th { border: 1px solid black; }
#mytable {
width: 100%;
border-collapse: collapse;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id='mytable'>
<tr>
<th>ID</th>
<th>Date</th>
<th>Source</th>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>80</td>
<td>2011-07-08</td>
<td>ABC</td>
</tr>
<tr>
<td>94</td>
<td>2013-06-05</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>75</td>
<td>2012-01-01</td>
<td>ABC</td>
</tr>
</table>
您只需更改 return aSrcIdx - bSrcIdx;
。
因为您需要 return -1, 0, 1 来自比较函数,而不是布尔值。
var custom_sort =['ABC','MNO','XYZ'];
var $rows = $('tr:gt(0)').detach().sort(function(a, b){
var aSrcIdx =custom_sort.indexOf( $(a).find('td:last').text());
var bSrcIdx = custom_sort.indexOf( $(b).find('td:last').text());
return aSrcIdx - bSrcIdx;
});
$('#mytable').append($rows);
table, td, th { border: 1px solid black; }
#mytable {
width: 100%;
border-collapse: collapse;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id='mytable'>
<tr>
<th>ID</th>
<th>Date</th>
<th>Source</th>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>80</td>
<td>2011-07-08</td>
<td>ABC</td>
</tr>
<tr>
<td>94</td>
<td>2013-06-05</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>75</td>
<td>2012-01-01</td>
<td>ABC</td>
</tr>
</table>
我正在关注@charlietfl 在
table 好像不适合我。
我的代码:
var custom_sort =['ABC','MNO','XYZ'];
var $rows = $('tr:gt(0)').detach().sort(function(a, b){
var aSrcIdx =custom_sort.indexOf( $(a).find('td:last').text());
var bSrcIdx = custom_sort.indexOf( $(b).find('td:last').text());
return aSrcIdx > bSrcIdx;
});
$('#mytable').append($rows);
table, td, th { border: 1px solid black; }
#mytable {
width: 100%;
border-collapse: collapse;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id='mytable'>
<tr>
<th>ID</th>
<th>Date</th>
<th>Source</th>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>80</td>
<td>2011-07-08</td>
<td>ABC</td>
</tr>
<tr>
<td>94</td>
<td>2013-06-05</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>75</td>
<td>2012-01-01</td>
<td>ABC</td>
</tr>
</table>
如您所见,我希望能够按 ABC,MNO,XYZ,ABC,MNO,XYZ
为什么代码不起作用?
如何自定义排序我的 table 看起来像:
ID | Date | Source |
---|---|---|
80 | 2011-07-08 | ABC |
94 | 2013-06-05 | MNO |
50 | 2013-06-05 | XYZ |
75 | 2012-01-01 | ABC |
50 | 2012-01-01 | MNO |
50 | 2012-01-01 | XYZ |
const customSort = ['ABC','MNO','XYZ'];
const rows = [...$('tr:gt(0)').detach()];
const iMax = rows.length * customSort.length;
const sortedRows = [];
for (let i = 0; i < iMax; i++) {
const targetValue = customSort[i % customSort.length];
const targetRowIndex = rows.findIndex(row => {
return $(row).find('td:last').text() === targetValue;
});
if (targetRowIndex !== -1) {
const targetRow = rows.splice(targetRowIndex, 1)[0];
sortedRows.push(targetRow);
}
}
sortedRows.push(...rows);
$('#mytable').append(sortedRows);
table, td, th { border: 1px solid black; }
#mytable {
width: 100%;
border-collapse: collapse;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id='mytable'>
<tr>
<th>ID</th>
<th>Date</th>
<th>Source</th>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>80</td>
<td>2011-07-08</td>
<td>ABC</td>
</tr>
<tr>
<td>94</td>
<td>2013-06-05</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>75</td>
<td>2012-01-01</td>
<td>ABC</td>
</tr>
</table>
您只需更改 return aSrcIdx - bSrcIdx;
。
因为您需要 return -1, 0, 1 来自比较函数,而不是布尔值。
var custom_sort =['ABC','MNO','XYZ'];
var $rows = $('tr:gt(0)').detach().sort(function(a, b){
var aSrcIdx =custom_sort.indexOf( $(a).find('td:last').text());
var bSrcIdx = custom_sort.indexOf( $(b).find('td:last').text());
return aSrcIdx - bSrcIdx;
});
$('#mytable').append($rows);
table, td, th { border: 1px solid black; }
#mytable {
width: 100%;
border-collapse: collapse;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id='mytable'>
<tr>
<th>ID</th>
<th>Date</th>
<th>Source</th>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>80</td>
<td>2011-07-08</td>
<td>ABC</td>
</tr>
<tr>
<td>94</td>
<td>2013-06-05</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>MNO</td>
</tr>
<tr>
<td>50</td>
<td>2012-01-01</td>
<td>XYZ</td>
</tr>
<tr>
<td>75</td>
<td>2012-01-01</td>
<td>ABC</td>
</tr>
</table>