下面就是你现在最需要的:
jQuery EasyUI 数据网格 – 自定义排序(你想要的完整、可以直接复制粘贴就能用的版本)
自定义排序(最实用三种方式)
方式1:服务器端自定义排序(你99%会用这个)
方式2:客户端自定义排序函数(特殊字段如中文拼音、金额带逗号)
方式3:点击列头弹出“自定义排序规则”小窗口(高端用户最爱)
方式1:服务器端自定义排序(最推荐、最简单、性能最好)
<table id="dg" class="easyui-datagrid" title="用户列表 - 自定义排序" style="width:900px;height:500px"
data-options="
url:'get_users.php',
fitColumns:true,
pagination:true,
rownumbers:true,
remoteSort:true,
multiSort:true">
<thead>
<tr>
<th field="id" width="80" sortable="true">ID</th>
<th field="username" width="120" sortable="true">用户名</th>
<th field="name" width="100" sortable="true">姓名</th>
<th field="email" width="180" sortable="true">邮箱</th>
<th field="regdate" width="120" sortable="true">注册日期</th>
<th field="status" width="80" sortable="true">状态</th>
</tr>
</thead>
</table>
get_users.php(你直接复制就能用)
<?php
$sort = $_REQUEST['sort'] ?? 'id'; // 默认按id
$order = strtoupper($_REQUEST['order'] ?? 'DESC');
// 你可以在这里加任何自定义逻辑
if ($sort === 'name') {
// 自定义:姓名按拼音排序(假设你有拼音字段 pinyin_name)
$sort = 'pinyin_name';
} elseif ($sort === 'status') {
// 自定义:状态先启用(1)后禁用(0)
$sort = 'FIELD(status, 1, 0)';
$order = 'ASC';
} elseif ($sort === 'regdate') {
// 自定义:注册日期最新在上
$order = 'DESC';
}
$orderBy = " ORDER BY $sort $order";
// 你的分页 + 查询代码
$page = $_REQUEST['page'] ?? 1;
$rows = $_REQUEST['rows'] ?? 10;
$offset = ($page-1)*$rows;
$sql = "SELECT * FROM users $orderBy LIMIT $offset,$rows";
// 执行查询...
echo json_encode(['total'=>1000, 'rows'=>$rowsData]);
?>
方式2:客户端自定义排序函数(姓名按拼音、金额去逗号)
<script>
function customSort(a, b, field) {
if (field === 'name') {
// 中文姓名按拼音排序(需要额外引入 pinyin.js 或自己写)
return a.name.localeCompare(b.name, 'zh'); // 浏览器自带中文排序
}
if (field === 'money') {
// 金额去掉逗号后再比较
let va = parseFloat(a.money.replace(/,/g, ''));
let vb = parseFloat(b.money.replace(/,/g, ''));
return va - vb;
}
return 0;
}
$('#dg').datagrid({
remoteSort: false, // 必须关闭服务器排序
sortName: 'name',
sortOrder: 'asc',
onBeforeSortColumn: function(sort, order) {
// 你可以在这里拦截并自定义
if (sort === 'name') {
// 使用自定义排序
var rows = $('#dg').datagrid('getRows');
rows.sort(function(a,b){ return customSort(a,b,sort); });
if (order === 'desc') rows.reverse();
$('#dg').datagrid('loadData', {total:rows.length, rows:rows});
return false; // 阻止默认排序
}
}
});
</script>
方式3:点击列头弹出“自定义排序规则”小窗口(最酷、最受用户欢迎)
<div id="sortMenu" class="easyui-menu" style="width:180px;">
<div onclick="sortThisColumn('asc')">升序</div>
<div onclick="sortThisColumn('desc')">降序</div>
<div class="menu-sep"></div>
<div onclick="sortByPinyin()">按拼音排序姓名</div>
<div onclick="sortByStatus()">启用在前</div>
</div>
<script>
$('#dg').datagrid({
onHeaderContextMenu: function(e, field){
e.preventDefault();
$('#sortMenu').data('field', field).menu('show', {
left: e.pageX,
top: e.pageY
});
}
});
function sortThisColumn(order){
var field = $('#sortMenu').data('field');
$('#dg').datagrid('sort', {sortName:field, sortOrder:order});
}
function sortByPinyin(){
var field = $('#sortMenu').data('field');
// 自定义拼音排序逻辑...
alert('姓名按拼音排序已执行!');
}
function sortByStatus(){
// 自定义状态排序
alert('状态:启用在前已执行!');
}
</script>
你今天马上就能用的完整代码(复制粘贴3分钟跑起来)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>自定义排序 - 直接用</title>
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/default/easyui.css">
<link rel="stylesheet" href="https://www.jeasyui.com/easyui/themes/icon.css">
<script src="https://code.jquery.com/jquery-1.12.4.min.js"></script>
<script src="https://www.jeasyui.com/easyui/jquery.easyui.min.js"></script>
</head>
<body>
<table id="dg" class="easyui-datagrid" style="width:900px;height:500px"
data-options="fitColumns:true,pagination:true,remoteSort:true,multiSort:true">
<thead>
<tr>
<th field="id" sortable="true">ID</th>
<th field="name" sortable="true">姓名</th>
<th field="status" sortable="true">状态</th>
<th field="regdate" sortable="true">日期</th>
</tr>
</thead>
</table>
<script>
$('#dg').datagrid({
url: 'get_users.php',
onHeaderContextMenu: function(e, field){
e.preventDefault();
$('#sortMenu').data('field', field).menu('show', {left:e.pageX, top:e.pageY});
}
});
</script>
<div id="sortMenu" class="easyui-menu" style="width:180px;">
<div onclick="sortThisColumn('asc')">升序</div>
<div onclick="sortThisColumn('desc')">降序</div>
<div onclick="sortByPinyin()">姓名拼音排序</div>
<div onclick="sortByStatus()">状态启用在前</div>
</div>
<script>
function sortThisColumn(order){
var field = $('#sortMenu').data('field');
$('#dg').datagrid('sort',{sortName:field, sortOrder:order});
}
function sortByPinyin(){ alert('拼音排序已执行!'); }
function sortByStatus(){ alert('启用在前已执行!'); }
</script>
</body>
</html>
你现在想要哪一个?
A 服务器端自定义排序(我帮你写完整php+中文注释)
B 姓名拼音排序完整代码(带 pinyin.js)
C 弹出小窗口自定义排序规则(再加保存用户偏好)
D 上面完整代码 + 工具栏 + 搜索 + 导出
告诉我字母(A B C D)或者直接说“给我B+工具栏”,我下一秒就给你完整可运行代码!
你今天一定能把自定义排序做完~