Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.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
使用href javascript对无序列表进行排序_Javascript - Fatal编程技术网

使用href javascript对无序列表进行排序

使用href javascript对无序列表进行排序,javascript,Javascript,我有一份无序列表,如下所示: <ul id = "mylist"> <li><a href="https://firebasestorage.googleapis.com/v0/b/cse611-3045f.appspot.com/o/test%40gmail.com%2F10-10-2019%2Ftest%40gmail.com-10-10-2019.xlsx?alt=media&amp;token=21f64bfe-c7ce-4155-a24e-668

我有一份无序列表,如下所示:

<ul id = "mylist">
 <li><a href="https://firebasestorage.googleapis.com/v0/b/cse611-3045f.appspot.com/o/test%40gmail.com%2F10-10-2019%2Ftest%40gmail.com-10-10-2019.xlsx?alt=media&amp;token=21f64bfe-c7ce-4155-a24e-6684e784a8fd">10-10-2019</a></li>
 <li><a href="https://firebasestorage.googleapis.com/v0/b/cse611-3045f.appspot.com/o/test%40gmail.com%2F11-10-2019%2Ftest%40gmail.com-11-10-2019.xlsx?alt=media&amp;token=36367037-770e-4e99-b405-571c5aa79a64">11-10-2019</a></li>
 <li><a href="https://firebasestorage.googleapis.com/v0/b/cse611-3045f.appspot.com/o/test%40gmail.com%2F5-10-2019%2Ftest%40gmail.com-5-10-2019.xlsx?alt=media&amp;token=407ed4f5-b530-4149-99f6-fde685fba34a">5-10-2019</a></li></ul>

我想把它们分类

<ul>
  <li a href="#">11-10-2019</a></li>
  <li a href="#">10-10-2019</a></li>
  <li a href="#">5-10-2019</a></li>
</ul>

PS : I want the same URL, just using '#' here to avoid work.
    2019年10月11日 2019年10月10日 2019年10月5日
PS:我想要相同的URL,只是在这里使用“#”来避免工作。
但是我现在写的代码没有正确排序。我猜是因为天气不好吧

我的代码:

var container = document.getElementById("myList");
var contents = container.querySelectorAll("li");

var list = [];
for(var i=0; i<contents.length; i++){
    list.push(contents[i]);

}

list.sort(function(a, b){
    var aa = parseInt(a.innerHTML);
    var bb = parseInt(b.innerHTML);
    return aa < bb ? -1 : (aa > bb ? 1 : 0);
});

/* list.reverse(); */

for(var i=0; i<list.length; i++){
    console.log(list[i].innerHTML);
    container.insertBefore(list[i], container.firstChild);
}


var container=document.getElementById(“myList”);
var contents=container.querySelectorAll(“li”);
var列表=[];
对于(VarI=0;Ibb?1:0);
});
/*list.reverse()*/

对于(var i=0;i您正在选择
li
元素。它们的
innerHTML
如下所示:

'<a href="https://firebasestorage.googleapis.com/v0/b/cse611-3045f.appspot.com/o/test%40gmail.com%2F10-10-2019%2Ftest%40gmail.com-10-10-2019.xlsx?alt=media&amp;token=21f64bfe-c7ce-4155-a24e-6684e784a8fd">10-10-2019</a>'


您可以直接使用
li
s的
textContent
获取日期,然后将它们作为日期对象直接进行比较,假设结构相同

var container=document.getElementById(“myList”);
var contents=Array.from(container.querySelectorAll(“li”);
contents=contents.sort(函数(a,b){
var aa=新日期(a.textContent.replace('-','/');
var bb=新日期(b.textContent.replace('-','/');
控制台日志(aa、bb);
返回aabb-1:0);
});
log(contents.map(x=>x.innerHTML));
while(container.firstChild){
container.removeChild(container.firstChild);
}
contents.forEach(content=>{
container.appendChild(content);
});

您不需要对代码进行太多更改:

您只需进行以下更改:

var aa = new Date(a.querySelector('a').innerHTML).getTime();
var bb = new Date(b.querySelector('a').innerHTML).getTime();
var container=document.querySelector(“#mylist”);
var contents=container.querySelectorAll(“li”);
变量列表=[…内容];
列表.排序(函数(a,b){
var aa=新日期(a.querySelector('a').innerHTML.getTime();
var bb=新日期(b.querySelector('a').innerHTML.getTime();
返回aabb-1:0);
});
/*list.reverse()*/

对于(var i=0;i,这里是实现目标的另一种方法,它将文本解析为日期,清除容器,然后用新创建的
列表项将其填满:

var container=document.getElementById(“myList”);
var contents=Array.from(container.querySelectorAll(“li>a”);
目录.排序(函数(a,b){
var aa=Date.parse(a.textContent);
var bb=Date.parse(b.textContent);
返回aabb-1:0);
});
/*contents.reverse()*/
//清理容器
container.innerHTML='';

对于(var i=0;这些innerHtml值看起来不像int,它们看起来像date,您应该解析为date而不是intAre,因为日期总是在同一个月?(我假设2019年10月是一个月?)从
var aa=date.parse(a.innerHtml)
//开始,希望格式与date.parse期望的格式相同;)您的日期是哪种格式的?如果是d-m-Y,当前接受的答案将给出错误的结果(在实践中,不仅仅是理论上——例如,我的浏览器解析为2019年5月10日的
5-10-2019
).你为什么不直接减去日期:
bb-aa
?这应该也行,我不想在不必要的地方修改操作码
list.sort(function(a, b){
    var aDate = a.children[0].innerHTML;
    var bDate = b.children[0].innerHTML;

    return compareDates(aDate, bDate);
});
var aa = new Date(a.querySelector('a').innerHTML).getTime();
var bb = new Date(b.querySelector('a').innerHTML).getTime();