如何使用 bootstrap-table 对第一 table 列中的元素进行分组
How to group elements in first table column with bootstrap-table
我想要一个 table 和 bootstrap table,其中第一列总是首先排序,以便相同的值得到分组。
例子
假设它现在按 "Class" 排序,那么它看起来像这样:
| Class | Name | Day |
|-------|-------|-----|
| 3C | Ben | 1 |
| 4A | Aaron | 2 |
| 4A | Tom | 3 |
当 table 现在按天排序时,它应该如下所示:
| Class | Name | Day |
|-------|-------|-----|
| 4A | Aaron | 2 |
| 4A | Tom | 3 |
| 3C | Ben | 1 |
问题是它通常看起来像这样:
| Class | Name | Day |
|-------|-------|-----|
| 4A | Aaron | 2 |
| 3C | Ben | 1 |
| 4A | Tom | 3 |
我知道多重排序扩展,但我只发现当单击一列并按住 Shift 键单击另一列时,它将按一次单击的顺序进行排序。我的问题是我希望始终首先对第一列进行排序,但我还没有找到方法。
您尝试使用 Bootstrap sortable plugin 是否成功?据我所知,DataTables 是最流行且易于使用的解决方案之一。
还有一个功能强大的 Bookmarklet(也很容易使用),我过去用过很多次,你应该会觉得有用。如果您需要本地结果,请尝试使用 enter link description here.
我已经为我的问题创建了一个巨大的解决方法,它有效。即使它不能获得良好的性能,而且它肯定不是最好的方法,但无论如何。这是我用示例创建的内容:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.css">
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/extensions/multiple-sort/bootstrap-table-multiple-sort.js"></script>
<table id="table"
data-editable="true"
>
<thead>
<tr>
<th data-field="what">Name</th>
<th data-field="number" data-sortable="true">ID</th>
<th data-field="sort" data-sortable="true">Something</th>
</tr>
</thead>
</table>
<script>
var $table = $('#table')
$(function() {
var sort = [
{
"sortName": "what",
"sortOrder": "asc"
}
]
var data = [
{
'what': 'Group 1',
'number': '2',
'sort': 'something',
},
{
'what': 'Group 2',
'number': '5',
'sort': 'no',
},
{
'what': 'Group 1',
'number': '8',
'sort': 'ok',
},
{
'what': 'Group 3',
'number': '1',
'sort': 'ye',
}
]
var order = "desc";
var lastColumn = "";
$table.bootstrapTable({
onSort: function(name) {
if(lastColumn == name) {
if(order == "desc") {
order = "asc";
} else {
order = "desc";
}
} else {
lastColumn = name;
order = "desc";
}
sort = [
{
"sortName": "what",
"sortOrder": "asc"
},
{
"sortName": name,
"sortOrder": order
}
]
$table.bootstrapTable('multiSort', sort);
},
sortPriority: sort,
data: data,
})
})
</script>
它是如何工作的?
所以只要一行被点击(因此它被排序)就会触发一个事件。现在,当事件触发时,我执行一条命令,为 table 设置 multiSort-value
。这 multiSort
始终让第一行先排序,然后单击该行。当同一行再次被点击时,它会向另一个方向排序。每当单击另一行时,它会使用默认值而不是当前值进行排序,并且可以再次单击以再次在升序和降序之间切换。
我想要一个 table 和 bootstrap table,其中第一列总是首先排序,以便相同的值得到分组。
例子
假设它现在按 "Class" 排序,那么它看起来像这样:
| Class | Name | Day |
|-------|-------|-----|
| 3C | Ben | 1 |
| 4A | Aaron | 2 |
| 4A | Tom | 3 |
当 table 现在按天排序时,它应该如下所示:
| Class | Name | Day |
|-------|-------|-----|
| 4A | Aaron | 2 |
| 4A | Tom | 3 |
| 3C | Ben | 1 |
问题是它通常看起来像这样:
| Class | Name | Day |
|-------|-------|-----|
| 4A | Aaron | 2 |
| 3C | Ben | 1 |
| 4A | Tom | 3 |
我知道多重排序扩展,但我只发现当单击一列并按住 Shift 键单击另一列时,它将按一次单击的顺序进行排序。我的问题是我希望始终首先对第一列进行排序,但我还没有找到方法。
您尝试使用 Bootstrap sortable plugin 是否成功?据我所知,DataTables 是最流行且易于使用的解决方案之一。
还有一个功能强大的 Bookmarklet(也很容易使用),我过去用过很多次,你应该会觉得有用。如果您需要本地结果,请尝试使用 enter link description here.
我已经为我的问题创建了一个巨大的解决方法,它有效。即使它不能获得良好的性能,而且它肯定不是最好的方法,但无论如何。这是我用示例创建的内容:
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
<link rel="stylesheet" href="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.css">
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/bootstrap-table.min.js"></script>
<script src="https://unpkg.com/bootstrap-table@1.16.0/dist/extensions/multiple-sort/bootstrap-table-multiple-sort.js"></script>
<table id="table"
data-editable="true"
>
<thead>
<tr>
<th data-field="what">Name</th>
<th data-field="number" data-sortable="true">ID</th>
<th data-field="sort" data-sortable="true">Something</th>
</tr>
</thead>
</table>
<script>
var $table = $('#table')
$(function() {
var sort = [
{
"sortName": "what",
"sortOrder": "asc"
}
]
var data = [
{
'what': 'Group 1',
'number': '2',
'sort': 'something',
},
{
'what': 'Group 2',
'number': '5',
'sort': 'no',
},
{
'what': 'Group 1',
'number': '8',
'sort': 'ok',
},
{
'what': 'Group 3',
'number': '1',
'sort': 'ye',
}
]
var order = "desc";
var lastColumn = "";
$table.bootstrapTable({
onSort: function(name) {
if(lastColumn == name) {
if(order == "desc") {
order = "asc";
} else {
order = "desc";
}
} else {
lastColumn = name;
order = "desc";
}
sort = [
{
"sortName": "what",
"sortOrder": "asc"
},
{
"sortName": name,
"sortOrder": order
}
]
$table.bootstrapTable('multiSort', sort);
},
sortPriority: sort,
data: data,
})
})
</script>
它是如何工作的?
所以只要一行被点击(因此它被排序)就会触发一个事件。现在,当事件触发时,我执行一条命令,为 table 设置 multiSort-value
。这 multiSort
始终让第一行先排序,然后单击该行。当同一行再次被点击时,它会向另一个方向排序。每当单击另一行时,它会使用默认值而不是当前值进行排序,并且可以再次单击以再次在升序和降序之间切换。