jQuery UI Sortable表格拖拽表头整列都会改变给出完整代码
时间: 2024-01-03 22:03:15 浏览: 113
下面是一个基于jQuery UI Sortable的表格拖拽表头整列都会改变的完整代码:
```html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jQuery UI Sortable</title>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<style>
table {
border-collapse: collapse;
width: 100%;
}
th,
td {
border: 1px solid #ddd;
padding: 8px;
text-align: left;
}
th {
background-color: #f2f2f2;
cursor: pointer;
}
.ui-state-highlight {
height: 1.5em;
line-height: 1.2em;
border: 1px dashed red;
}
</style>
</head>
<body>
<table id="sortable">
<thead>
<tr>
<th data-col="0">Name</th>
<th data-col="1">Age</th>
<th data-col="2">Country</th>
<th data-col="3">Job</th>
</tr>
</thead>
<tbody>
<tr>
<td>John</td>
<td>28</td>
<td>USA</td>
<td>Developer</td>
</tr>
<tr>
<td>Jane</td>
<td>32</td>
<td>Canada</td>
<td>Designer</td>
</tr>
<tr>
<td>James</td>
<td>25</td>
<td>UK</td>
<td>Manager</td>
</tr>
</tbody>
</table>
<script src="//code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="//code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script>
$(function() {
$("#sortable thead th").click(function() {
var colIndex = $(this).index();
var sortOrder = $(this).hasClass("asc") ? "desc" : "asc";
$(this).closest("table").find("tbody tr").each(function() {
var $cell = $(this).find("td").eq(colIndex);
var value = $cell.text();
$cell.data("value", value);
});
$(this).closest("table").find("tbody tr").sort(function(a, b) {
var aVal = $(a).find("td").eq(colIndex).data("value");
var bVal = $(b).find("td").eq(colIndex).data("value");
if (sortOrder === "asc") {
return aVal.localeCompare(bVal);
} else {
return bVal.localeCompare(aVal);
}
}).appendTo($(this).closest("table").find("tbody"));
$(this).closest("table").find("thead th").removeClass("asc desc");
$(this).addClass(sortOrder);
}).disableSelection();
$("#sortable").sortable({
axis: "x",
handle: "th",
placeholder: "ui-state-highlight",
start: function(e, ui) {
ui.placeholder.width(ui.helper.outerWidth());
},
update: function(e, ui) {
var $table = ui.item.closest("table");
var thIndex = ui.item.index();
$table.find("tr").each(function() {
$(this).find("td, th").eq(thIndex).detach().appendTo($(this));
});
}
}).disableSelection();
});
</script>
</body>
</html>
```
上述代码中,我们首先创建了一个表格,其中thead中的每个th元素都有一个data-col属性,用于指示该列的索引(从0开始)。
然后,我们使用jQuery UI Sortable使表头可拖拽排序,并在update事件中实现了拖拽整列的功能。具体来说,我们使用了axis、handle、placeholder、start和update参数来实现这个功能。
最后,我们使用了click事件来实现列排序的功能。具体来说,我们为每个th元素添加了click事件,用于更新tbody中的行的顺序。我们还使用了localeCompare函数来比较字符串的值,并使用addClass和removeClass函数来切换排序方向。
需要注意的是,为了防止拖拽时选择文本,我们使用了disableSelection函数来禁用了文本选择功能。
阅读全文