如何对含日期的<a>标签列表按日期从旧到新排序
实现方法
直接用原生JavaScript即可完成排序,无需引入第三方库,核心逻辑分三步:
- 定位节目列表的父容器,筛选出所有class为
episodecell的节目条目 - 从每个条目内class为
caption2的元素文本中,提取分隔符•前的日期字符串,转为可比较的时间戳 - 按时间戳从小到大对条目排序(对应日期从早到晚),将排序后的节点重新插回父容器即可覆盖原有顺序
完整可运行代码如下:
// 获取节目列表父容器 const episodeListWrap = document.querySelector('.pure-u-1.pure-u-sm-3-5'); // 将所有节目a标签转为数组,方便调用排序方法 const episodeList = Array.from(episodeListWrap.querySelectorAll('a.episodecell')); episodeList.sort((prev, next) => { // 提取caption2中•符号前的日期文本 const extractDate = (el) => el.querySelector('.caption2').textContent.trim().split('•')[0].trim(); // 转为时间戳做大小比较 const prevTime = new Date(extractDate(prev)).getTime(); const nextTime = new Date(extractDate(next)).getTime(); // 升序排列即日期早的在前 return prevTime - nextTime; }); // 把排序后的节点重新插入父容器,页面会自动按新顺序渲染 episodeList.forEach(item => episodeListWrap.appendChild(item));
补充说明:你提供的示例里日期格式为「月缩写+日」(如Jun 26),JS原生Date对象可直接解析识别,同一年的节目可以直接用上述代码正常排序。如果你的列表包含跨年度的节目,需要在解析日期时补充对应年份信息再转时间戳,否则会出现跨年内容排序错乱的问题。
针对你给出的示例HTML,执行上述代码后排好序的条目顺序为:
- Jun 26:Priest and Joe Illidge on crafting new villain Entropy without any rules
- Jun 27:Ep. 647: Best Sci Fi Beach Reading
- Jun 29:Filosofía de coyote
- Jun 30:489: Very Inappropriate Thoughts About This Computer
完全符合「日期最早的条目排在列表顶部、日期最新的条目排在列表末尾」的要求。
内容的提问来源于stack exchange,提问作者cazepeda
相关产品推荐
相关产品推荐

