Javascript jquery排序函数和prepend/insertAfter?
我有一个函数,可以根据列表项的日期和类别对列表项进行排序。时间不早了,我又累又沮丧,所以不确定我在这里错过了什么 函数应首先确定类是否为Javascript jquery排序函数和prepend/insertAfter?,javascript,jquery,sorting,Javascript,Jquery,Sorting,我有一个函数,可以根据列表项的日期和类别对列表项进行排序。时间不早了,我又累又沮丧,所以不确定我在这里错过了什么 函数应首先确定类是否为.pinted,并按日期排序,然后将其插入列表顶部 然后,它应该查看项目的日期(在数据日期中找到),如果该日期早于今天,则添加类.pass按日期对其排序,然后将其插入固定的项目之后 最后,它应该对剩余的项目进行排序,并将它们插入到最后一个项目之后,该项目的类为.pass 代码如下: //sort todo list-items by type and then
.pinted
,并按日期排序,然后将其插入列表顶部
然后,它应该查看项目的日期(在数据日期中找到),如果该日期早于今天,则添加类.pass
按日期对其排序,然后将其插入固定的项目之后
最后,它应该对剩余的项目进行排序,并将它们插入到最后一个项目之后,该项目的类为.pass
代码如下:
//sort todo list-items by type and then date
function sortTodo() {
var itemDate = "";
var date = new Date();
$(".todo-list-item").each(function() {
var itemDate = new Date($(this).data("date"));
if($(this).hasClass('pinned')) {
$(".todo-list-item.pinned").sort(function(a,b) {
return date > itemDate;
}).each(function() {
$(".todo-list").prepend(this);
})
} else if(date > itemDate) {
$(this).addClass("past");
$(".todo-list-item.past").sort(function(a,b) {
return date > itemDate;
}).each(function() {
$(".todo-list").prepend(this);
})
} else {
$(".todo-list-item").not(".pinned, .past").sort(function(a,b) {
return date > itemDate;
}).each(function() {
$(".todo-list").append(this);
})
}
});
}
$(document).ready(function() {
sortTodo();
});
到目前为止,脚本不会按需要将固定项放置到顶部,除非我添加新的固定项,并且在items类更改或删除后不按日期排序。在第一页加载时,固定的项不在todo列表的顶部,原因是它是列表中第一个在todo列表前添加的项 当页面加载时,第一个项目被固定,因此它被预先添加到列表中。然后它继续在列表中循环,直到找到日期>项目日期的项目,并将其放在固定的项目之前 要了解我的意思,请尝试通过将固定项作为无序列表中的最后一项来更改html
*抱歉-我没有足够的代表留下评论…您的代码正在对元素进行排序,并在三个单独的步骤中对每个项目移动一次(!)。这打乱了整体结果的顺序 只需排序一次,然后将排序列表的不同部分依次追加(jQuery
.filter()
对此很有用)。完成后,所有项目都将重新订购
关于Array#sort
:返回true
或false
时,它不起作用。它要求您返回小于、等于或大于0的数字。幸运的是,从一个日期中减去另一个日期就可以得到这些类型的数字
下面将对页面上所有列表中的所有项目进行排序
//助手
函数appendToParent(){this.parentNode.appendChild(this);}
$(函数(){
var$items=$(“.todo列表项”).sort(函数(a,b){
返回新日期($(a).数据(“日期”)-新日期($(b).数据(“日期”);
});
//按优先级追加项目
$items.filter(“.pinted”)。每个(appendToParent);
$items.filter(“.pinted.pass”)。每个(appendToParent);
$items.filter(“:not(.pinted)”)。每个(appendToParent);
$items.filter(“:not(.pinted.pass”)。每个(appendToParent);
});代码>
.pass{font-style:italic;}
.pinted{color:red;}
清单1
过去的项目5
第4项
- 项目1(固定)
第3项
- 过去项目2(固定)
清单2
过去的项目5
第4项
- 项目1(固定)
第3项
- 过去项目2(固定)
一次执行一个任务的结果是什么?如果您指的是在不运行其他条件的情况下运行每个条件,则它们会被正确排序和固定