如果这是重复的话,我很抱歉,但我找不到符合我问题的现有答案(我看过了!)。
我有一个列表,其中包含十几个项目,每个项目都有一个<span>*fixed date*</span>
。
包含日期的列表看起来像......
<ul id="whatson">
<li>
<span class="chkdate">06/04</span>
somestuff1
</li>
<li>
<span class="chkdate">06/05</span>
somestuff2
</li>
.......
</ul>
我想过滤列表,以便隐藏所有比今天更早的日期。
会给我今天的日期,例如mm / dd = 06/04,这似乎很好。
我现在想要针对每个格式化为例如的列表项进行检查。 06/04并隐藏那些早于今天的物品。
只需在页面加载时运行一次。
我的代码到目前为止......
$(document).ready(function () {
var d = new Date();
var month = d.getMonth() + 1;
var day = d.getDate();
var todaysdate = (month < 10 ? '0' : '') + month + '/' + (day < 10 ? '0' : '') + day;
alert("checking " + datetocheck + " against today = " + todaysdate);
--- * temp check *
var datetocheck = $('#whatson li span.chkdate').text();
if (datetocheck < todaysdate) {
$('#whatson li').hide();
} else {
$('#whatson li').show();
};
})
我的提醒显示..
Checking 06/0406/04 against today 06/04 *(when all list dates match)*
并正确显示。
更改警报显示的一个或多个列表日期
Checking 06/0306/04 against today 06/04 *(when one or more list dates don't match)*
并且没有显示任何内容。
你能帮忙,我觉得这很直接但是得不到结果呢?
答案 0 :(得分:1)
你需要一个for循环:
var datestocheck = $('#whatson li span.chkdate');
for (var i = 0; i < datestocheck.length; i++) {
var compare = parseDate(datestocheck[i].text());
if (compare < todaysdate) {
datestocheck[i].hide();
}
}
答案 1 :(得分:1)
示例html
<ul id="whatson">
<li>
<span class="chkdate">06/01</span>
somestuff1
</li>
<li>
<span class="chkdate">06/04</span>
somestuff1
</li>
<li>
<span class="chkdate">06/05</span>
somestuff2
</li>
</ul>
脚本
var today = new Date();
$("#whatson .chkdate").each(function() {
// split the text and get the month/day value
var datepieces = $(this).text().split("/");
var month = datepieces[0];
var day = datepieces[1];
// if the month of the element is previous to today's month
// hide the li
if (month < (today.getMonth() + 1))
$(this).closest("li").hide();
// if the day of the element is previous to today
// hide the li
if (day < today.getDate())
$(this).closest("li").hide();
});
答案 2 :(得分:1)
使用.each()
jQuery函数遍历所选的每个元素。使用JavaScript .split()
函数将文本值转换为日期。另请参阅documentation on JavaScript dates。
HTML:
<ul id="whatson">
<li><span class="chkdate">06/03</span> somestuff1</li>
<li><span class="chkdate">06/04</span> somestuff1</li>
<li><span class="chkdate">06/05</span> somestuff2</li>
</ul>
JavaScript的:
$(document).ready(function () {
var todaysdate = new Date();
var datestocheck = $('#whatson li').each(function (i, v) {
var listitem = $(v); var chkdate = $('span', listitem);
var stringdate = chkdate.text();
var monthtocheck = stringdate.split('/')[0];
var daytocheck = stringdate.split('/')[1];
var datetocheck = new Date();
datetocheck.setFullYear(
todaysdate.getFullYear(), // four digit year
monthtocheck-1, // month number minus 1 b/c month is 0-11
daytocheck // the day number
);
//alert(datetocheck + ' < ' + todaysdate);
if (datetocheck < todaysdate) {
listitem.hide();
} else {
listitem.show();
}
});
})
答案 3 :(得分:1)
正如评论中所提到的,它总是更好地比较Date
类型的变量(这样你就不需要处理截至12月的广泛比较,这可能很麻烦)。因此,我使用的方法是将您的文本转换为Date
类型对象,并将其与当前日期进行比较:
var d = new Date();
d.setHours(0, 0, 0, 0);
var year = d.getFullYear();
$(".chkdate").each(function (i) {
//added a setHours function to make time parameters of Date zero before comparing
((new Date($(this).text() + "/" + year)).setHours(0, 0, 0, 0) < d) ? $(this).closest("li").hide() : $(this).closest("li").show();
});
做出的假设:
将始终保持mm/dd
的格式
请参阅小提琴:http://jsfiddle.net/UAR8y/8/
修改强>:
.setHours(0, 0, 0, 0);
>
更改为<
答案 4 :(得分:0)
请查看http://jsfiddle.net/2dJAN/57/
$(document).ready(function() {
var d = new Date();
var month = d.getMonth()+1;
var day = d.getDate();
var todaysdate = (month<10 ? '0' : '') + month + '/' + (day<10 ? '0' : '') + day;
$('#whatson li').each(function(){
var datetocheck = $(this).text();
if (datetocheck < todaysdate) {
$(this).hide();
}
});
})
我知道这是否是你的要求。