2013-12-19 43 views
0

我有几个在p标记中包含日期的div。我只想要那些显示当前日期的div显示。jquery这是指if语句中的类

示例HTML:

<div class="box"> 
    <p class="date">2013/12/18</p> 
</div> 
<div class="box"> 
    <p class="date">2013/12/19</p> 
</div> 
<div class="box"> 
    <p class="date">2013/12/20</p> 
</div> 

这里是我现在所拥有的的JavaScript,并且它不工作。

$(document).ready(function(){ 
    var d = new Date(); 

    var month = d.getMonth()+1; 
    var day = d.getDate(); 

    var date = d.getFullYear() + '/' + 
     ((''+month).length<2 ? '0' : '') + month + '/' + 
     ((''+day).length<2 ? '0' : '') + day; 

    if($('.date').html() == date){ 
     $(this).parent().css('display', 'block'); 
    } 
}); 

代码进入if语句,但.css()行不起作用。任何建议,为什么这不工作,以及如何解决它?

+1

定义“你的元素是不工作”。是否显示正确的元素,或者显示的元素太多? – RobG

回答

1

在功能$(document).ready的主体中,的this值不是您.date元件

更换

if($('.date').html() == date){ 
    $(this).parent().css('display', 'block'); 
} 

$('.date').each(function() { 
    if ($(this).html() == date) { 
     $(this).parent().css('display', 'block'); 
    } 
}); 

在这段代码的第二部分,你在.each()函数体:this代表与类date

+0

为什么不使用'filter'方法? – undefined

+0

@undefined你的答案实际上更漂亮。我用一个更简单的实现来更容易地解释为什么原始代码不起作用 –

+0

这最终为我工作。谢谢。 – Watty

1

if不使用JavaScript创建范围,在你的代码thiswindow对象,你要查询的DOM,并选择元素,但它也不会在这里解决问题,因为html方法只返回HTML第一个匹配元素的含量,合适的方法是在这里filter

$('.date').filter(function() { 
    return $.trim(this.innerHTML) === date; 
}).parent().show();