我有一个事件列表–我只想显示过去的事件。为此,我想遍历这些元素,找到包含日期的div,然后将其与今天的当前日期进行比较。
这些事件的基本结构如下:
<div class="past-event">
<span class="event-title">Event 1</span>
<span class="event-date">05.05.19</span>
</div>
<div class="past-event">
<span class="event-title">Event 2</span>
<span class="event-date">20.04.19</span>
</div>
我使用Moment.js解析日期。到目前为止,我已经为此使用了jQuery(我通常不这样做),但是无论如何它都托管在Wordpress网站上,因此jQuery已经可用。我很高兴听到任何解决方案,而不仅仅是与jQuery相关的解决方案。
这是我代码简化版的JSFiddle。布局方式上,前两个元素应该隐藏,后两个元素应该是蓝色(我添加了一个“蓝色”类,以便在代码无法正常工作时更加清楚)
答案 0 :(得分:3)
这里有几个问题:
event_date
创建为矩对象,但您正在传递自身的值而不是event_date_raw
.toDate()
并使用new Date()
来获取当前日期时间。find()
来获取当前.event-date
中的.past-event
元素。您当前的逻辑仅适用于第一个逻辑。在解决这些问题后,它可以正常工作:
$('.past-event').each(function(i, obj) {
var event_date_raw = $(this).find('.event-date').text();
var event_date = moment(event_date_raw, "DD.MM.YY").toDate();
var now = new Date();
if (now < event_date) {
$(this).addClass("hidden");
} else {
$(this).addClass("blue");
}
});
body {
display: flex;
width: 100%;
flex-wrap: ; /* fix this too */
margin: 0;
color: #EEE;
}
.past-event {
width: 50%;
display: flex;
flex-direction: column;
}
.blue {
background-color: blue;
}
.hidden {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>
<div class="past-event">
<span class="event-title">Event 1</span>
<span class="event-date">05.05.19</span>
</div>
<div class="past-event">
<span class="event-title">Event 2</span>
<span class="event-date">20.04.19</span>
</div>
<div class="past-event">
<span class="event-title">Event 3</span>
<span class="event-date">01.02.19</span>
</div>
<div class="past-event">
<span class="event-title">Event 4</span>
<span class="event-date">05.05.18</span>
</div>
答案 1 :(得分:1)
我相信以下是您想要的:
https://jsfiddle.net/4dehv2pj/
jQuery('.past-event').each(function(i, obj) {
var event_date_raw = jQuery(this).children('.event-date').text();
var event_date = moment(event_date_raw, "DD/MM/YY");
var now = moment().format("DD/MM/YY");
console.log(event_date_raw);
if (now < event_date) {
jQuery(this).addClass("hidden");
} else {
jQuery(this).addClass("blue");
}
});
将日期与moment.js进行比较有点不同,只是大于或小于运算符。
我正在使用moment(event_date).isAfter(now)
这将为您提供正确的比较。
另外,通过使用jQuery('.event-date').text();
,您将获得与.event-date
匹配的所有元素,所以我改为执行类似jQuery(this).children('.event-date').text();
的操作,该操作采用当前元素并检查子元素的子元素。该查询选择器的当前元素。
答案 2 :(得分:0)
这是您可能需要的
$('.event-date').each((index, item) => {
var date = moment($(item).text(), 'DD.MM.YY').toDate();
if (date > new Date()) {
console.log(date)
$(item).closest('.past-event').css('display', 'none');
}
});