javascript - 基于使用 jquery 的选择选项的升序/降序表
问题描述
我正在尝试使用选择选项(名称/类型/文档/日期)来实现表格的排序,然后单击其他选择选项,包括升序和降序表格应该显示排序结果。请帮忙。任何帮助,将不胜感激。提前致谢。下面是我的代码,它有一个用于降序/升序的单选按钮。
(function($) {
const
cellValue = (row, index) => index !== -1 ? $(row).children('td').eq(index).text() : 0,
compareCells = (index, options) =>
(rowA, rowB) => {
const colOpts = options[index] || {};
let
a = cellValue(rowA, index),
b = cellValue(rowB, index);
if (colOpts.dateFormat) {
a = moment(a, colOpts.dateFormat).valueOf(),
b = moment(b, colOpts.dateFormat).valueOf()
}
return $.isNumeric(a) && $.isNumeric(b) ? a - b : a.toString().localeCompare(b);
};
Object.assign($.fn, {
scanSelectOptionData: function() {
return [...this.get(0).options].reduce((acc, option, index) => {
const colOpts = {};
if (option.dataset.dateFormat) {
colOpts.dateFormat = option.dataset.dateFormat;
}
return { ...acc, [option.value]: colOpts };
});
},
sortTable: function(columnIndex, opts, reverse) {
let rows = this.find('tbody tr').toArray().sort(compareCells(columnIndex, opts));
return this.append(reverse ? rows.reverse() : rows);
}
});
})(jQuery);
$(document).ready(function() {
const
$table = $('#myTable'),
$select = $('#nameselect > select'),
$radio = $('input[name="sort-direction"]');
const sortTable = () => {
const
columnIndex = parseInt($select.val(), 10),
opts = $select.scanSelectOptionData(),
reverse = $('input[name="sort-direction"]:checked').val() === 'DESC';
$table.sortTable(columnIndex, opts, reverse);
};
$select.on('change', sortTable);
$radio.on('change', sortTable);
});
table, th, td {
border: thin solid grey;
}
table {
border-collapse: collapse;
margin-top: 1em;
}
th, td {
padding: 0.5em;
}
#nameselect, .sort-direction-radio {
display: inline-flex;
}
#nameselect > select {
min-width: 10em;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" />
<div id="nameselect">
<select required>
<option value="-1">select</option>
<option value="0">Names</option>
<option value="1">Type</option>
<option value="2">Doc</option>
<option value="3" data-date-format="DD/MM/YYYY">Date</option>
</select>
</div>
<div id="selectlogic" style="display:inline-flex">
<select required>
<option>select</option>
<option value="0">Ascending</option>
<option value="1">Descending</option>
</select>
</div>
<div class="sort-direction-radio">
<input type="radio" name="sort-direction" value="ASC" checked />ASC
<input type="radio" name="sort-direction" value="DESC" />DESC
</div>
<table id="myTable">
<thead>
<tr id="table-header">
<th>Name</th>
<th>Type</th>
<th>Doc</th>
<th>Date</th>
</tr>
</thead>
<tbody id="">
<tr>
<td>Mary</td>
<td>text1</td>
<td>word</td>
<td>1/1/21</td>
</tr>
<tr class="" data-type="John">
<td>John</td>
<td>text2</td>
<td>Excel</td>
<td>31/1/21</td>
</tr>
<tr class="" data-type="Martin">
<td>Martin</td>
<td>text3</td>
<td>pdf</td>
<td>21/2/21</td>
</tr>
<tr class="" data-type="Rozi">
<td>Rozi</td>
<td>text4</td>
<td>powepoint</td>
<td>5/10/20</td>
</tr>
</tbody>
</table>
解决方案
推荐阅读
- google-app-maker - Google App Maker onClick 事件异步运行
- perl - 使用 Test::Mojo 上传的文件为空
- googletest - 如何指定测试应在 BUILD 文件中运行的次数
- android - 应用程序在尝试执行“+”运算符时不断崩溃
- c++ - 在运行 microsoft/windowsservercore 的 docker 容器中运行简单的 exe
- tensorflow-serving - Tensorflow Serving 模型在磁盘上有 3 个版本,但只有最新版本可用
- r - 将Stata代码更改为R
- angular - 用于视图的 Angular HttpClient 分页
- algorithm - 如果需要重新访问 BFS 中的已访问节点,时间复杂度是多少?
- angular - 如何在 Angular 中按顺序运行异步函数?