【发布时间】:2018-09-09 04:37:13
【问题描述】:
我的 html 中有 4 个不同的日期,过期日期 END MAR 20 应该是红色而不是绿色,下一个日期应该是绿色,即 END ARP 29,所有其他之前的日期应该是红色,我已经实现了截止日期过滤,但我需要过期日期应该是红色的
var date = $(".grid-item").map(function() {
return $(this).text().trim()
}).get().sort(function(a, b) {
var f = function(date) {
var m, d, y;
if (date.startsWith("END")) {
date = date.split(" ");
var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
m = months.indexOf(date[1]) + 1;
d = date[2];
} else [y, m, d] = date.split("-");
return [(new Date()).getFullYear(), m, d];
}
var t = new Date();
return Math.abs(t.getTime() - new Date(...f(a)).getTime()) - Math.abs(t.getTime() - new Date(...f(b)).getTime());
});
$(".grid-item").addClass('red').filter(function() {
return $(this).text().trim() === date[0];
}).removeClass('red').addClass('green');
.grid-item {
border: 1px solid black;
width: 100px;
height: 50px;
}
.green {
background-color: green;
}
.red {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="grid-item">END MAY 29</div>
<div class="grid-item">END SEP 29</div>
<div class="grid-item">END MAR 20</div>
<div class="grid-item">END APR 29</div>
【问题讨论】:
-
究竟是什么失败了?
-
实际上在 map 函数中它将存储所有日期并返回索引 return $(this).text().trim() === date[0];对于最近的绿色日期,但我不想用绿色显示过期日期
-
@Kunalshetty 你的方法基本上是错误的。依靠文本进行数字或日期计算并不可靠、不安全且难以阅读。使用从零开始的月份值,例如 Javascript
Date对象,并将这些值存储在元素属性中。然后对这些值进行计算。示例:<div class="grid-item" data-month="2" data-day="29">END MAY 29</div>
标签: javascript jquery html colors