Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery排序函数和prepend/insertAfter?_Javascript_Jquery_Sorting - Fatal编程技术网

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(固定)

一次执行一个任务的结果是什么?如果您指的是在不运行其他条件的情况下运行每个条件,则它们会被正确排序和固定