如何用JS/jQuery按日期/时间排序动态生成的Div元素
解决动态生成的.note和.activity元素按时间排序的问题
你的核心问题在于当前代码仅针对.note元素做了处理,既没包含.activity元素,也没适配它的datetime属性。下面是修改后的完整代码,能同时覆盖两类元素的排序需求:
// 排序函数,可在元素动态生成后调用 function sortItemsByTime() { // 同时选中.note和.activity两类元素 const items = $('.note, .activity').get(); // 按时间排序:先获取对应属性的时间值,转成Date对象比较 items.sort(function(a, b) { // 优先取data-datetime,没有则取datetime属性 const timeA = new Date($(a).data('datetime') || $(a).attr('datetime')); const timeB = new Date($(b).data('datetime') || $(b).attr('datetime')); // 降序排列(最新的在前),要升序就反过来 return timeB - timeA; }); // 将排序后的元素重新插入父容器(请根据实际DOM结构修改父容器选择器) $('.items-container').append(items); } // 示例:在动态生成元素完成后调用排序 // 比如AJAX请求回调、DOM更新完成后执行 // sortItemsByTime();
关键修改点说明:
- 扩展选择范围:用
$('.note, .activity')一次性选中两类需要排序的元素,解决原代码只处理.note的问题 - 兼容两种时间属性:通过
$(el).data('datetime') || $(el).attr('datetime')的逻辑,同时适配.note的data-datetime和.activity的datetime属性 - 统一排序逻辑:将两种属性的时间值都转为Date对象,保持原有的时间比较逻辑,确保排序结果准确
只要在动态生成.note和.activity元素之后调用sortItemsByTime(),就能实现两类元素按时间统一排序的效果。
内容的提问来源于stack exchange,提问作者bstime
相关产品推荐
相关产品推荐

