setInterval显示/隐藏类

时间:2016-01-07 09:20:28

标签: javascript jquery html

我想要隐藏/显示一组div,具体取决于独特的开始/结束时间。开始/结束时间作为数据属性存储在div中,如下所示:

<div class="action-item-wrapper " data-startTime="1452157793000" data-endTime="1452157796000">

我尝试使用setInterval检查是否应显示或隐藏任何div。我尝试过以下方法:

setInterval(function() {
    var currentTime = new Date().getTime();
    if ( $('.action-item-wrapper').attr('data-startTime') < currentTime ) {
            $('.action-item-wrapper').slideDown();
    }
    if ( $('.action-item-wrapper').attr('data-endTime') < currentTime ) {
            $('.action-item-wrapper').slideUp();
    }
}, 1000);

以上只是切换上下滑动所有内容。以下没有做任何事情。

setInterval(function() {
    var currentTime = new Date().getTime();
    if ( $('.action-item-wrapper').attr('data-startTime') > currentTime ) {
            $(this).slideDown();
    }
    if ( $('.action-item-wrapper').attr('data-endTime') < currentTime ) {
            $(this).slideUp();
    }
}, 1000);

如何使用setInterval(或其他等效项)检查div是否应该处于活动状态并在结束时间后隐藏?

2 个答案:

答案 0 :(得分:1)

您正在尝试阅读并比较所有div的开始时间和结束时间。相反,你需要迭代它们以比较开始/结束时间然后显示/隐藏,检查下面的代码

HTML:仅小写的数据属性

<div class="action-item-wrapper " data-starttime="1452157793000" data-endtime="1452157796000">

jQuery:

setInterval(function() {
    var currentTime = new Date().getTime();
    //iterate all action item wrapper
    $('.action-item-wrapper').each(function(){
        //compare start and end time with current date
        if ( $(this).data('starttime') >= currentTime ) {
            $(this).slideDown();
         }
        if ( $(this).data('endtime') <= currentTime ) {
            $(this).slideUp();
        }
    });

}, 1000);

答案 1 :(得分:1)

也许你的意思是这个。请注意,数据属性名称必须全部小写

enctype="multipart/form-data"
$(function() {
  setInterval(function() {
    var $wrapper = $('.action-item-wrapper'),
    currentTime = new Date().getTime();
    $wrapper.each(function() {
      var startTime = $(this).data("starttime"),
          endTime = $(this).data("endtime");
      if (currentTime >= startTime && currentTime<=endTime) {
        $(this).slideDown();
      }
      else $(this).slideUp();
    });
    }, 1000);
});