jQuery Contains/Not 包含日期范围

jQuery Contains/Not Contains with Date Range

我有一个商品列表,其中包含订单号和订购日期等属性。我的目标是将所有用户的订单加载到这些项目 div 中并允许它们进行过滤。当用户在文本字段中键入订单号时,我可以正确过滤。现在,我试图让他们选择日期范围和日期范围,并根据需要隐藏或显示 div。

这是一个示例 div:

<div class="item" data-orderNo="457748322" data-dateOrdered="12/17/2014">
    ... Order Details ...
</div>

我可以使用此代码按订单号过滤它们:

$('#orderNumberFilter').keyup(function () {
   var orderNo = $(this).val();
   if (orderNo == "") {
        $(".item").removeClass( "hiddenOrderNo" );
    } else {
        $(".item[data-orderNo*='"+orderNo+"']").removeClass( "hiddenOrderNo" );
        $(".item:not([data-orderNo*='"+orderNo+"'])").addClass( "hiddenOrderNo" );
    }
});

最后,我有两个日期选择器字段:fromDateFilter(最早日期)和 toDateFilter(最晚日期)。我正在尝试以下但它不起作用:

$( "#fromDateFilter" ).datepicker({
  onClose: function ( selectedDate ) {
        if(selectedDate == "") {
            $(".item").removeClass( "hiddenDateFrom" );
        } else {
            var start = new Date(selectedDate);
            var end = new Date($(".item").attr("data-dateOrdered"))
            if (start < end) {
                $(".item:not([data-dateOrdered*='"+selectedDate+"'])").addClass( "hiddenDateFrom" );
            } else {
                $(".item[data-dateOrdered*='"+selectedDate+"']").removeClass( "hiddenDateFrom" );
            }
        }
      }
    });
  }
});

toDateFilter 是一样的,我只是尝试切换胡萝卜方向。知道我做错了什么吗?

您可能需要像

这样的单一过滤方法
function filter() {
    var orderNo = $('#orderNumberFilter').val(),
        fd = $("#fromDateFilter").datepicker('getDate'),
        td = $("#toDateFilter").datepicker('getDate'),
        $items = $(".item"),
        $filtered = $items;
    if (orderNo != "") {
        $filtered = $filtered.filter("[data-orderNo*='" + orderNo + "']");
    }else if(!fd && !td){
        $items.removeClass('hiddenOrderNo');
    }

    $filtered = $filtered.filter(function () {
        var date = $.datepicker.parseDate('mm/dd/yy', $(this).attr('data-dateOrdered'));
        return (fd == null || date >= fd) && (td == null || date <= td);
    });
    $filtered.removeClass('hiddenOrderNo');
    $items.not($filtered).addClass('hiddenOrderNo');
}

在更改文本字段和日期字段时调用

$('#orderNumberFilter').on('keyup', filter);
$('#fromDateFilter, #toDateFilter').datepicker({
    onClose: filter
});

//to display some content, for demo only
$('.item').html(function() {
  return $(this).attr('data-orderNo') + '-' + $(this).attr('data-dateOrdered')
})

function filter() {
  var orderNo = $('#orderNumberFilter').val(),
    fd = $("#fromDateFilter").datepicker('getDate'),
    td = $("#toDateFilter").datepicker('getDate'),
    $items = $(".item"),
    $filtered = $items;
  if (orderNo != "") {
    $filtered = $filtered.filter("[data-orderNo*='" + orderNo + "']");
  } else if (!fd && !td) {
    $items.removeClass('hiddenOrderNo');
  }

  $filtered = $filtered.filter(function() {
    var date = $.datepicker.parseDate('mm/dd/yy', $(this).attr('data-dateOrdered'));
    return (fd == null || date >= fd) && (td == null || date <= td);
  });
  $filtered.removeClass('hiddenOrderNo');
  $items.not($filtered).addClass('hiddenOrderNo');
}

$('#orderNumberFilter').on('keyup', filter);
$('#fromDateFilter, #toDateFilter').datepicker({
  onClose: filter
});
.hiddenOrderNo {
  background-color: lightgrey;
}
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.js"></script>
<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/themes/redmond/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.4/jquery-ui.js"></script>

<input id="orderNumberFilter" />
<input id="fromDateFilter" />
<input id="toDateFilter" />
<div>
  <div class="item" data-orderno="457748322" data-dateordered="12/17/2014">457748322-12/17/2014</div>
  <div class="item" data-orderno="854455225" data-dateordered="12/18/2014">854455225-12/18/2014</div>
  <div class="item" data-orderno="7155222" data-dateordered="12/19/2014">7155222-12/19/2014</div>
  <div class="item" data-orderno="984445622" data-dateordered="12/17/2014">984445622-12/17/2014</div>
  <div class="item" data-orderno="123584397" data-dateordered="01/15/2015">123584397-01/15/2015</div>
</div>