jquery:遍历表,将硬编码日期与Date.today()进行比较,然后删除日期

时间:2013-03-26 22:44:01

标签: jquery datejs

感谢大家考虑我的newbe问题。 我正在使用jQuery迭代表并捕获数组中的所有硬编码日期。 我将这些日期与Date.today()进行比较;使用.isAfter()函数。 如果硬编码日期是过去的,它应该得到.css(“显示”,“无”);

<table>
    <html>
      <table>
        <tr class="gig">

           <td class="gigDate">Mar 27 2013</td>
           <td>the Saloon</td>
           <td>Atlanta, Ga</td>
           <td>$20 (2 passes)</td>
            <td>button to purchase tix<td>
        </tr>

        <tr class="gig"><td class="gigDate"> ... date2 ..</td></tr>
        <tr class="gig"><td class="gigDate"> ... date3 ..</td></tr>
        <tr class="gig"><td class="gigDate"> ... date4 ect ..</td></tr>
  </table>

<script type="text/javascript">
$("document").ready( function() {

var stringDate = []; //create array to hold elements

var now = Date.today(); // create current date

$('.gigDate').each(function (i, e) {   //adds hardcoded dates to array
stringDate.push($(e).text());
});

for(var y = 0; y < stringDate.length; y++){
var singleDate =  Date.parse(stringDate[y]);  //parse to milliseconds
var compare = now.isAfter(singleDate);        //compare to today's date

if(compare){
    $('.gig').css("display", "none");   //hide <tr class="gig"> 
                                      //if in the past
      }
}    
 });
</script>

循环逻辑似乎运行正常,但添加样式显示的if(语句):none是打击。 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:0)

我不知道这是什么功能,但你可以直接比较日期。我想这会更容易。

答案 1 :(得分:0)

你有没有理由过滤客户端?似乎效率低下。你的html是硬编码还是你有服务器端脚本?除非没有其他选项,否则你真的应该预渲染过滤结果。

答案 2 :(得分:0)

当你试图隐藏一行时,你只需隐藏所有行 - $('。gig')选择所有行,而不仅仅是你认为它应该的行。

将逻辑移动到测试日期的循环中。大致相同(我尽可能少地更改你的代码,可能仍然无法正常工作,还没有检查):

var now = Date.today(); // create current date

$('.gigDate').each(function (i, e) {   //adds hardcoded dates to array
   var current = ($(e).text());
   var singleDate =  Date.parse(current);  //parse to milliseconds
   var compare = now.isAfter(singleDate);        //compare to today's date
   if(compare){
       // we want to hide the parent of td, not the td:
       $(e).parent().css("display", "none");   //hide <tr class="gig"> 
                                      //if in the past
   }

});

答案 3 :(得分:0)

即使比较有效,你也会用类'gig'隐藏任何东西。

您可以通过从字符串创建新日期(xxxxxxx)来简化此操作。然后你可以使用'&lt;'进行比较运营商。

假设您的演出日期与您的活动日期格式相同:

var now = new Date(); // create current date    
$('.gigDate').each(function (i, e) { 
    ele = $(this).html();
    gigDate = new Date(ele);
    if (gigDate<now){
        $(this).hide();
    }

});

你可以看到它在这里工作:

http://jsfiddle.net/skelly/vzH8U/