嗨,我尝试创建一个函数,以便我可以遍历包含 100 个项目的 json(WordPress json API)文件。我只想显示 4 个,我只想显示今天的 4 个项目。因此,该函数必须检查今天的日期,并循环搜索日历项目的 100 个项目 (mbwpc-start),并以今天的功能形式显示最接近的 4 个项目。
我希望让我自己清楚。
JSON 文件:
http://www.wilhelminaschool.eu/api/get_recent_posts/?count=100&post_type=mbwpc_event
我现在拥有的功能,但这不起作用:
function showAgenda(){
var wpAPI = 'http://www.wilhelminaschool.eu/api/get_recent_posts/?count=150&post_type=mbwpc_event';
$.getJSON(wpAPI, function(result) {
var html = [];
var count = 0;
$.each( result.posts, function( i, item ) {
var date = new Date(item["custom_fields"]["mbwpc-start"]*1000);
if(item["custom_fields"]["mbwpc-start"]*1000 > Math.round((new Date()).getTime() / 1000))
{
var html = '<li class="span12"><div class="thumbnail"><h4>' + item.title + '</h4><p>' + item.content.replace(/</?[^>]+>/gi, '') + '</p>Datum: ' + date.toLocaleDateString() + '</div></li>';
$( ".left>.thumbnails" ).append(html);
} // end if time from today
// show max 4 items
if (count == 3) {return false;}
count++;
}); // end each
}); // end getjson
} // end function
您的第一个任务是对数组进行排序。 您可以将自定义比较函数传递给 sort()
命令,以按您喜欢的任何条件对数组进行排序。 该函数必须返回一个整数:零表示两个值相等,正结果表示应首先对左参数进行排序,负值表示应首先对右参数进行排序。 在这种情况下,我们将mbwpc-start
字段解析为 int,然后减去这两个值。
// first, you must sort your items by the desired criteria,
// mbwpc-start descending
result.posts.sort( function(left,right) {
return parseInt(right["custom_fields"]["mbwpc-start"]) - parseInt(left["custom_fields"]["mbwpc-start"]);
});
下一个问题是您的日期比较。 您正在正确创建日期对象,但有一种更简单的方法来比较它们。 JavaScript Date 对象有一个方便的函数toDateString()
该函数将日期对象格式化为日期。 我们可以使用它来检测 mbwpc 开始日期是否与今天的日期相同。
var today = new Date();
today = today.toDateString(); // "Thu Dec 19 2013"
现在应该很容易循环浏览帖子列表,寻找今天的项目,并在我们达到限制时停止。
var itemCount = 0;
$.each(result.posts, function(i, item) {
var postDate = new Date(item["custom_fields"]["mbwpc-start"]*1000);
if ( postDate.toDateString() == today ) {
// build your HTML and add it to your document
// ...
// Count, and break the loop if necessary
if (++itemCount >= 4)
return false; // break the loop
}
});