You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用jQuery按data-id排序非表格结构的HTML待办列表元素?

解决非表格结构的jQuery待办列表排序问题

你完全不需要依赖表格来实现排序!非表格结构的DOM元素同样可以用jQuery轻松完成排序,核心是对元素集合排序后重新渲染到容器中。

问题分析

你已经给每个待办项(.list-elem)设置了data-id来标记优先级(1=最高,3=最低),之前的代码只是对数组newArr做了排序,但没有把排序后的结果同步到实际的DOM结构里,所以页面上看不到排序效果。

解决方案实现

我们可以直接操作DOM元素集合,通过sort()方法定义排序规则,再把排序后的元素重新追加到容器中。以下是完整的修正代码:

按优先级从高到低排序(重要性优先)

function importantOption() {
  // 获取所有待办项元素
  var items = $('.list-elem');
  // 根据data-id降序排序(1=最高优先级,所以b-a实现从高到低)
  items.sort(function(a, b){
    return $(b).data('id') - $(a).data('id');
  });
  // 将排序后的元素重新添加到容器中
  items.appendTo('.to-do-lists');
}

按优先级从低到高排序

function lowestOption() {
  var items = $('.list-elem');
  items.sort(function(a, b){
    return $(a).data('id') - $(b).data('id');
  });
  items.appendTo('.to-do-lists');
}

按日期排序(根据待办项里的日期字符串)

function dateOption() {
  var items = $('.list-elem');
  items.sort(function(a, b){
    // 提取元素内的日期时间字符串,转成可比较的Date对象
    var dateStrA = $(a).find('.to-do-date h3').text();
    var dateA = new Date(dateStrA.replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$2-$1'));
    
    var dateStrB = $(b).find('.to-do-date h3').text();
    var dateB = new Date(dateStrB.replace(/(\d+)\/(\d+)\/(\d+)/, '$3-$2-$1'));
    
    // 按日期升序(早的在前),如果要降序就返回dateB - dateA
    return dateA - dateB;
  });
  items.appendTo('.to-do-lists');
}

小优化建议

你原来的countArray()函数只是把id推到newArr里,但当用户删除待办项时,这个数组并没有同步更新,后续依赖这个数组的逻辑可能会出问题。建议直接从DOM元素上获取data-id来排序,就像上面的方案一样,这样不需要维护额外的数组,逻辑更可靠。

内容的提问来源于stack exchange,提问作者Mariusz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:18:39