使用javascript按ID排序列表

Sort a list by id by using javascript

本问题已经有最佳答案,请猛点这里访问。

我正在iOS上制作一个PhoneGap应用程序,需要按时间排序我尝试将时间添加到每个LI项目的ID中,然后根据ID进行排序。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<ul id="test">
<li id="4112">blub
</li>

<li id="1422">blaaah
</li>

<li id="6640">hmmmm
</li>

<li id="2221">one more
</li>


</ul>

这里是javascript:

1
2
3
4
5
6
7
$(function(){
var elems = $('#test').children('li').remove();
elems.sort(function(a,b){
    return (new Date(a.id) > new Date(b.id));
});
$('#test').append(elems);
});

http://jsfiddle.net/3uyuq/1103/

我试了一下铬,它运行得很好。但是,如果我尝试使用PhoneGap应用程序,列表的排序就不正确。它不服从任何命令。有什么解决办法吗?P/S:有人说在Safari上应该是(新日期(A.ID)-新日期(B.ID)),但似乎它不影响PhoneGap

详细解释我的电话间隙代码。此代码从数据库检索记录,并将其显示为HTML上的项目列表。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
function getAllDeadlines_success(tx, results){

var len = results.rows.length;
//var s ="";
$('#allList').empty();
var tmpDueDate = '1900-01-01';
var tmpDueTime = '00:00';
for (var i=0; i<len; i++){
    var allDeadline = results.rows.item(i);

    var deadlineDatePart = allDeadline.duedate.split('-');
    var deadlineTimePart = allDeadline.duetime.split(':');

    var newDate = new Date(deadlineDatePart[0], deadlineDatePart[1] - 1 , deadlineDatePart[2], deadlineTimePart[0], deadlineTimePart[1], 0, 0);        
    var notiDate = new Date(newDate - 86400*1000);
    //compare with current time
    var result = isLate(allDeadline.duedate, allDeadline.duetime).toString();
    if ( result =="true"){        
        $('#allList').append('<li id ="'+allDeadline.duedate+' '+allDeadline.duetime+'">'+ allDeadline.class +''+ allDeadline.duedate+'  '+ allDeadline.duetime+''+ allDeadline.description +'
</li>
'
);
        // window.plugin.notification.local.add({
        //  id : getRandomInt(0,99999),
        //     message: 'Dont forget to complete: '+allDeadline.description+'',
        //     badge: 0,
        //     date: notiDate
        // });
    }
}

$(function(){
    var elems = $('#allList').children('li').remove();
    elems.sort(function(a,b){

        return (new Date(a.id) > new Date(b.id));
    });

    $('#allList').append(elems);
});
$("#allList").listview().listview('refresh');

}


比较函数必须返回一个整数。sort检查它是负的、零的还是正的,并用它来确定两个元素应该如何排序。这样做:

1
2
3
elems.sort(function(a, b) {
    return a.id - b.id;
});

或者,在现代ES6风格中:

1
elems.sort((a, b) => a.id - b.id);