Javascript 使用jquerysort按两个数据属性对元素进行排序
我有一个li元素,有两个数据属性,基本上我想先整理数据排列属性, 这就是元素Javascript 使用jquerysort按两个数据属性对元素进行排序,javascript,jquery,Javascript,Jquery,我有一个li元素,有两个数据属性,基本上我想先整理数据排列属性, 这就是元素 <ul> <li data-arrange="2" data-rdays="100">John</li> <li data-arrange="1" data-rdays="300">Paul</li> <li data-arrange="1" data-rdays="500">Bryan</l
<ul>
<li data-arrange="2" data-rdays="100">John</li>
<li data-arrange="1" data-rdays="300">Paul</li>
<li data-arrange="1" data-rdays="500">Bryan</li>
<li data-arrange="3" data-rdays="240">Mark</li>
<li data-arrange="3" data-rdays="500">Victor</li>
<li data-arrange="4" data-rdays="200">Tess</li>
</ul>
然后,我想根据data arrange属性排列,使用data rdays属性从高到低对其进行排序,这样看起来就像这样
1 500
1 300
2 100
3 500
3 240
4 200
结果应该是这样
Bryan
Paul
John
Victor
Mark
Tess
这就是我迄今为止所尝试的:
function sort_li(a, b){
return ($(b).data('arrange')) < ($(a).data('arrange')) ? 1 : -1;
/* Other return staments that I've tried
return ($(a).data('rdays') && $(b).data('arrange')) < ($(b).data('rdays')
&& $(a).data('arrange')) ? 1 : -1;
return new Date($(a).data("date")) - new Date($(b).data("date")); */
}
有没有办法我可以做到这一点?多谢各位 您可以首先对排列数据进行排序,对于具有相同排列数据的数据,可以使用arraysort对rdays数据进行排序
$function{
$ul li.sorta,b=>{
返回$a.data'arrange'-$b.data'arrange'| |$b.data'rdays'-$a.data'rdays';
}.附于“ul”之后;
};
约翰
保罗
布莱恩
做记号
胜利者
苔丝
这应该首先按升序在“排列”属性上排序,然后按降序在“关系日”属性上排序
function sort_li(a, b) {
const arrangeA = +($(a).data('arrange');
const arrangeB = +$(b).data('arrange');
if (arrangeA !== arrangeB) {
// sort arrange in ascending order
return arrangeA < arrangeB ? -1 : 1;
}
const rdaysA = +($(a).data('rdays');
const rdaysB = +$(b).data('rdays');
if (rdaysA !== rdaysB) {
// sort rdays in descending order
return rdaysA > rdaysB ? -1 : 1;
}
return 0;
}
我从来没有想过用简单的减法排序,但实际上这是非常优雅的。美好的
function sort_li(a, b) {
const arrangeA = +($(a).data('arrange');
const arrangeB = +$(b).data('arrange');
if (arrangeA !== arrangeB) {
// sort arrange in ascending order
return arrangeA < arrangeB ? -1 : 1;
}
const rdaysA = +($(a).data('rdays');
const rdaysB = +$(b).data('rdays');
if (rdaysA !== rdaysB) {
// sort rdays in descending order
return rdaysA > rdaysB ? -1 : 1;
}
return 0;
}