【问题标题】:JavaScript: Select elements with data value in range of X and YJavaScript:选择数据值在 X 和 Y 范围内的元素
【发布时间】:2013-04-09 21:10:21
【问题描述】:

我正在创建一个日历,并且需要能够通过确定是否有来选择(显示/隐藏)div.event 谁是data-dates(可能是字符串或数组,具体取决于事件出现的天数)存储在那里的 unix 时间戳日期中,它们位于代表当前所选月份的开始和结束的 unix 时间戳之间。比如:

现在是 2013 年 4 月,所以我希望只看到发生在 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 年 4 月的某个时间。如何选择它们?

【问题讨论】:

  • 看起来像 .filter api.jquery.com/filter 的工作选择所有事件 div,然后使用循环并比较日期的自定义回调进行过滤。
  • 我怀疑这可以用纯选择器来完成......
  • @KevinB 对此进行调查
  • 最好修改创建 DIV 的代码以添加 data-month 属性。
  • @Barmar 没错,会降低这个选择的复杂性,但我以后需要有一个方法来一次选择weekday,所以我认为这个data-dates 方法对所有人都有效。

标签: jquery jquery-selectors calendar jquery-data


【解决方案1】:

尝试使用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 方法在 IEfor 循环来检查数据数组是否包含 startend 之间的任何值。 Demo 2.

【讨论】:

  • var monthStart = new Date(y, m, 1); var monthEnd = new Date(y, m +1, 0); 然后呢?
  • Woohoo 感谢您在第二个演示中付出了额外的努力!效果很好。
猜你喜欢
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-23
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
相关资源
最近更新 更多