jQuery 多条件排序:按分数降序、时间升序对 div 元素进行复合排序
发布时间 - 2025-12-30 00:00:00 点击率:次本文详解如何使用 jquery 对 dom 元素(如 `.contest_entry`)实现多级排序:优先按 `span.points` 数值**降序排列**,分数相同时再按 `span.times` 字符串(时间格式)**升序排列**,确保结果既准确又符合业务逻辑。
在实际开发中,单字段排序往往无法满足复杂展示需求。例如竞赛榜单需优先显示高分用户,而同分者则按完成时间更早者靠前——这就需要多条件复合排序。jQuery 本身不提供内置多级排序方法,但可通过 Array.prototype.sort() 的比较函数灵活实现。
核心思路是
:在比较函数中逐级判断——先比主条件(points),若相等再比次条件(times)。注意两点关键细节:
- points 降序:用 rhsPoints - lhsPoints(而非 lhs - rhs),使数值大的排前面;
- times 升序:因原始 HTML 中时间为 " 09:55 " 这类带空格的字符串,直接字符串比较(如 "09:55" 天然有效,无需额外解析为 Date 对象(前提是格式统一为 HH:MM)。
以下是优化后的完整可运行代码(已修正原答案中错误的选择器 .child —— 示例 HTML 中并无 .child 容器):
$(function() {
var sortedList = $('.contest_entry').toArray().sort(function(lhs, rhs) {
// 提取并解析 points 值(注意 trim() 去除空格)
var lhsPoints = parseInt($(lhs).find('span.points').text().trim(), 10);
var rhsPoints = parseInt($(rhs).find('span.points').text().trim(), 10);
if (lhsPoints === rhsPoints) {
// points 相等时,按 times 升序:较早时间排前面
var lhsTime = $(lhs).find('span.times').text().trim();
var rhsTime = $(rhs).find('span.times').text().trim();
return lhsTime > rhsTime ? 1 : -1; // 字符串比较,"09:55" < "17:20" → true
} else {
// points 降序:高分在前
return rhsPoints - lhsPoints;
}
});
$("#list").html(sortedList);
});✅ 注意事项与最佳实践:
- 使用 .trim() 清除 text() 返回的首尾空格,避免 parseInt(" 14 ") 虽可工作,但时间字符串 " 09:55 " 比较时空格可能导致意外结果;
- 若 times 包含秒(如 "09:55:23")或跨日,建议改用 Date.parse() 或 moment.js 解析为毫秒再比较;
- 排序后重新插入 DOM 会触发重排(reflow),大量元素时可考虑文档片段(documentFragment)优化性能;
- 确保所有 .contest_entry 都包含 .points 和 .times 子元素,否则 parseInt(undefined) 会返回 NaN,导致排序异常——生产环境建议添加存在性校验。
最终排序效果示例(基于你的 HTML 数据):
19 分组内按时间升序 → "17:19"、"17:20"、"17:34";
16 分(09:55)排在 19 分之后、14 分(12:39)之前——完全符合「高分优先、同分早到优先」的业务规则。
# jquery
# html
# js
# 排列
# Array
# sort
# date
# 字符串
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在IIS管理器中快速创建并配置网站?
Laravel怎么自定义错误页面_Laravel修改404和500页面模板
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
青岛网站建设如何选择本地服务器?
Android仿QQ列表左滑删除操作
jquery插件bootstrapValidator表单验证详解
中国移动官方网站首页入口 中国移动官网网页登录
Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】
高防服务器租用如何选择配置与防御等级?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
公司门户网站制作流程,华为官网怎么做?
UC浏览器如何切换小说阅读源_UC浏览器阅读源切换【方法】
Laravel如何自定义分页视图?(Pagination示例)
实例解析angularjs的filter过滤器
1688铺货到淘宝怎么操作 1688一键铺货到自己店铺详细步骤
Laravel如何自定义错误页面(404, 500)?(代码示例)
想要更高端的建设网站,这些原则一定要坚持!
Win11怎么开启自动HDR画质_Windows11显示设置HDR选项
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
详解Android——蓝牙技术 带你实现终端间数据传输
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
制作电商网页,电商供应链怎么做?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
如何在万网主机上快速搭建网站?
Android自定义listview布局实现上拉加载下拉刷新功能
如何快速搭建FTP站点实现文件共享?
创业网站制作流程,创业网站可靠吗?
浏览器如何快速切换搜索引擎_在地址栏使用不同搜索引擎【搜索】
米侠浏览器网页背景异常怎么办 米侠显示修复
bing浏览器学术搜索入口_bing学术文献检索地址
如何在香港免费服务器上快速搭建网站?
5种Android数据存储方式汇总
googleplay官方入口在哪里_Google Play官方商店快速入口指南
Laravel如何实现多对多模型关联?(Eloquent教程)
微信小程序 scroll-view组件实现列表页实例代码
Laravel Seeder怎么填充数据_Laravel数据库填充器的使用方法与技巧
如何快速搭建高效WAP手机网站?
高端企业智能建站程序:SEO优化与响应式模板定制开发
大连网站制作公司哪家好一点,大连买房网站哪个好?
什么是javascript作用域_全局和局部作用域有什么区别?
网站制作软件有哪些,制图软件有哪些?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
如何为不同团队 ID 动态生成多个非值班状态按钮
Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
制作企业网站建设方案,怎样建设一个公司网站?

