2014-05-14 70 views
2

我正在做的PhoneGap应用程序在iOS上,通过时间 我试过一次添加到每个项目里的ID,然后排序根据id需要排序列表排序名单通过ID通过使用javascript

<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:

$(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))在Safari上,但似乎它不影响电话

解释更多关于我的phonegap代码。此代码从db中检索记录并将其显示为html上的项目列表。

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+'"><a href="#DeadlineDetail" id = "'+allDeadline.id+'" data-transition = "slide">'+ allDeadline.class +'<br>'+ allDeadline.duedate+' '+ allDeadline.duetime+'<br>'+ allDeadline.description +'</a></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'); 

} 
+0

比较函数必须返回一个整数。你的比较函数返回'true'或'false'。 – Barmar

+0

你为什么要将ID转换为Date? – Barmar

+0

我转换为日期,因为我想检查项目a的日期是晚于还是在项目b的日期之前,所以我可以正确命令它们 – ThangPQ

回答

6

比较函数必须返回一个整数。 sort检查它是否为负值,零或正值,并使用它来确定如何对这两个元素进行排序。所以做:

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

或者,在现代ES6 style

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