2013-04-09 39 views
2

我正在创建一个日历,需要能够选择(显示/隐藏)div.event谁的data-dates(可能是字符串或数组,取决于天数该事件出现在)中,通过确定存储在那里的任何unix时间戳记日期是否落在代表当前选定月份的开始和结束的unix时间戳之间。因此,例如:JavaScript:选择数据值在X和Y范围内的元素

这是2013年4月,所以我希望看到只发生在四月事件(1364774400 [4月1日午夜]和1367366399 [4月30日,23:59:59])。

我有很多event的div。他们是这个样子:

<div class="event" data-dates="[1367539200, 1367625600]">...</div> 
<div class="event" data-dates="[1364947200]">...</div> 

假设那些具有落在某个时候在2013年四月我该如何选择他们的时间戳的一个或多个?

+0

看起来像.filter http://api.jquery.com/filter/工作选择所有事件的div,然后用循环遍历并比较日期的自定义回调过滤。 – 2013-04-09 21:13:39

+0

我怀疑,这可以通过使用纯选择来完成... – 2013-04-09 21:14:57

+0

@KevinB寻找到这个 – GhostToast 2013-04-09 21:17:09

回答

4

尝试让filter使用:

var rangeStart = 1364774400, 
    rangeEnd = 1367366399; 

$('.event').filter(function() { 
    return $(this).data('dates').some(function(date) { 
     return date >= rangeStart && date < rangeEnd; 
    }); 
}) 
.addClass('active'); 

http://jsfiddle.net/HJ9Xj/1/

注。 some方法不可用在IE < 9,从而可以垫片,或使用简单for循环,以检查是否数据数组包含startend之间的任何值。 Demo 2

+0

'var monthStart = new Date(y,m,1);''var monthEnd = new Date(y,m +1,0);'那么是什么? – GhostToast 2013-04-09 21:33:25

+0

呜呜呜谢谢你在第二个演示中加倍努力!精美的作品。 – GhostToast 2013-04-09 21:48:53