Javascript 按属性nodeValue对节点列表排序

Javascript 按属性nodeValue对节点列表排序,javascript,Javascript,假设我有一个节点列表 NodeList(5) [div.card, div.card, div.card, div.card, div.card] 0 : div.card 1 : div.card 2 : div.card 3 : div.card 4 : div.card length : 5 __proto__ : NodeList 我想使用比较函数根据该div名为数据开始的数据属性进行排序 var ca

假设我有一个节点列表

NodeList(5) [div.card, div.card, div.card, div.card, div.card]
0    :    div.card
1    :    div.card
2    :    div.card
3    :    div.card
4    :    div.card
length    :    5
__proto__    :    NodeList
我想使用比较函数根据该div名为数据开始的数据属性进行排序

var cards = document.querySelectorAll('.card');
Array.from(cards).sort( function(a,b){
    let a = a.attributes[2].nodeValue; 
    let b = b.attributes[2].nodeValue;

    return a - b;

}).forEach(el => {
    document.querySelector('.right3').appendChild(el);
});
但是,我将继续获取元素,而不是按其数据属性值排序,在我的示例中,该值是一个ISOString[ex.“2018-01-08T20:39:00Z”]

在这里查看JSFIDLE!
你能试试这个吗

var cards = document.querySelectorAll('.card');
Array.from(cards).sort( function(a,b){
    a = new Date(a.attributes[2].nodeValue).valueOf() 
    b = new Date(b.attributes[2].nodeValue).valueOf()

    return a - b;

}).forEach(el => {
    document.querySelector('.right3').appendChild(el);
});
问题是您正在比较两个字符串,结果是
NaN
(不是数字)。这会将日期转换为unix时间戳,这只是一个数字,然后比较它们


基于您的小提琴的示例:

请提供一个runnable,您是否拥有所有
数据开始属性值?给我一点时间,我会用jsfiddle编辑我的帖子,很抱歉我不清楚,你是用升序还是降序?我想如果我以后想用
reverse()
交换
sort()
?但为了回答你的问题,我选择了倒序(首先是最近的开始时间)谢谢Noah!我在控制台中尝试了这一点,得到了以下错误
uncaughtsyntaxerror:Identifier'a'已经声明了
,但是当我将let=>更改为var时,它起了作用!!!我现在明白了,你的答案实际上既不包含let也不包含var。@AkinHwan我更新了答案,并对此进行了修正。必须删除
let