显示潜水日期匹配使用.每个
Show Div When Dates Match Using .Each
我有一个招聘信息列表,当日期等于今天的日期时,我想显示一个div,上面写着"New"。
为了创建这个,我创建了一个javascript代码,它将在每个外部div的循环中执行,但我在正确运行.each函数时遇到了问题。
以下是指向JSFiddle的链接:http://jsfiddle.net/jeremyccrane/2p9f7/
这是HTML代码:
<div class="outer">
<div class="job-date">07-Feb-13</div>
<div class="new" style="display:none;">NEW</div>
<div class="value"></div>
</div>
<div class="outer">
<div class="job-date">12-Feb-13</div>
<div class="new" style="display:none;">NEW</div>
<div class="value"></div>
</div>
这是Javascript代码:
$( ".outer" ).each(function(i) {
var jd = $(".job-date").text();
j = jd.substr(0,2);
var today = new Date();
var dd = ( '0' + (today.getDate()) ).slice( -2 )
$('.value').html(dd + "/" + j);
if(dd === j) {
$('.new').show();
} else {
$('.new').show();
}
return false;
});
不太确定你认为问题是什么,但我可以看到几个问题。主要是,当你做例如:
$('.new').show();
您正在对class new的所有匹配元素调用show(),而不仅仅是您所在的外层下的元素。试试这个:
$('.new', this).show();
你设置了新的,以显示你的日期比较结果。我试过在下面更新你的小提琴:
$( ".outer" ).each(function(i) {
var jd = $(".job-date", this).text();
j = jd.substr(0,2);
var today = new Date();
var dd = ( '0' + (today.getDate()) ).slice( -2 )
$('.value', this).html(dd + "/" + j);
if(dd === j) {
$('.new', this).show();
} else {
// $('.new', this).show();
// do something different here
}
});
此代码似乎可以执行您想要的操作:
$(".outer").each(function(i) {
var jd = $(this).find(".job-date").text();
var j = jd.substr(0,2);
var today = new Date();
var dd = ('0' + (today.getDate())).slice(-2);
$(this).find('.value').html(dd + "/" + j);
if(dd == j) {
$(this).find('.new').show();
} else {
$(this).find('.new').hide();
}
return false;
});
http://jsfiddle.net/Dk4dQ/
您的主要问题是错过了所有的$(this).find()
调用。您正在遍历容器。使用$(this).find()
将获得这些容器中的控件。普通的$()
调用将在文档中找到所有匹配的元素,这不是您想要的。
在这种情况下,this
指的是容器。将它封装在jQuery函数中,可以使用jQueryfind方法来获取它的子级。
此外,正如其他人所提到的,无论成功或失败,您都是show()
,这同样不是您想要的。
这里有两个问题。首先,无论日期是否匹配,您都会触发show():
if(dd === j) {
$('.new').show();
} else {
$('.new').show(); // <-- shouldn't show in this case
}
第二个问题是,当您只想显示特定的div时,您使用类"new"显示所有内容。您需要为每个"新"div提供唯一的ID,然后修复代码,使其仅显示具有该特定ID的div。
您不需要复杂的迭代器函数。你只需要:
$(".outer .job-date" ).filter(function() {
return (Date.parse($(this).text()) / 86400000 | 0) == (new Date() / 86400000 | 0);
}).next().show();
filter
似乎是比each
更好的选择。首先,我们只想要一组日期等于今天的元素- 要做到这一点,我们可以选择日期,去掉时间部分。日期以自纪元以来的毫秒数表示。通过除以一天中的毫秒数(86400000,或60*60*24*1000),然后截断任何小数部分(javascript习语:
|0
),我们可以比较自epoch以来的完整天数 - 现在,有了一组包含今天日期的元素,
next()
将每个匹配的元素推进到下一个同级(类为new
的隐藏div),show()
显示了它
- Javascript,访问一个主要对象模块模式中的每个对象
- 显示5秒后隐藏潜水
- 如何包含特定于每个视图angularjs的javascript文件
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 是否有一个JS/jQuery函数可以获取某个类的每个元素的ID
- 测试数组中每个项的内容
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- 显示每个国家的传单地图
- 每个选择器的Jquery css颜色都在变化,但字体大小却没有变化
- JQuery UI可拖动潜水与滚动棒到鼠标
- 通过rails中的Ajax在控制器B的每个视图中渲染控制器a的视图
- 在Jquery倒计时计时器上设置每个数字的动画
- 多重潜水淡入淡出打开
- iPhone:固定位置潜水不可见
- Jquery:附加“;每个“;到“;关于“;事件
- 在Angular应用程序中每个帖子投票一次
- Jquery-每个循环不更新变量
- 如何将要单独填充的每个HTML画布路径/形状分开
- 显示潜水日期匹配使用.每个