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
。