Фильтр jquery на основе диапазона значений

0

как мы можем изменить этот код, чтобы отфильтровать даты (как substr в формате yyyymmdd), кроме как в указанном диапазоне.

<select id="all">
    <option value="abc_20010315_Volvo_A">Volvo_A</option>
    <option value="defg_20020408_saab_B">saab_B</option>
    <option value="xz_20100120_Volvo_C">Volvo_C</option>
</select>
<label for="from">From</label>
<input type="text" id="from" name="from">
<label for="to">to</label>
<input type="text" id="to" name="to">
<button type="button" id="filter">Filter</button>

даты получаются в формате yyyymmdd из селектора диапазонов.

function Filter(val){
var from = $("#from").val();
var to = $("#to").val();
  $("#all > option").each(function() {
    $(this).show();
    if(?){
      $(this).hide();
    }
  }); 
}

Какую функцию я могу использовать для сравнения даты в строке в качестве подстроки? Благодарю.

Я сделал это, но у него все еще есть некоторые проблемы.

$( "#Filter" ).click(function( event ) {
    var from = $("#from").val();
    var match = from.match(/(\d{4})-(\d{2})-(\d{2})/);
    from = parseInt(match[1] + match[2] + match[3]);

    var to = $("#to").val();
    var match = to.match(/(\d{4})-(\d{2})-(\d{2})/);
    to = parseInt(match[1] + match[2] + match[3]);

    var regex = /\d{8}/i;
    $("#all> option").each(function(){
        $(this).show();
        var opt = this.value;
        var dateValue = parseInt(opt.match(regex));
        if(dateValue < from && dateValue > to){
          $(this).hide();
        }
    }); 
    $("#all")[0].selectedIndex = 0;

});
  • 0
    Чего ты пытаешься достичь? Вы не можете скрыть опцию выбора тега.
  • 0
    конечно мы можем. Я пытаюсь отфильтровать параметры на основе выбранного диапазона дат.
Показать ещё 4 комментария
Теги:

1 ответ

0

Я решил это. Для тех, кто может столкнуться с подобной проблемой. Вот мое решение.

// implementation code for filter by date range
$( "#Filter" ).click(function( event ) {
    var from = $("#from").val();
    var match = from.match(/(\d{4})-(\d{2})-(\d{2})/);
    from = parseInt(match[1] + match[2] + match[3]);

    var to = $("#to").val();
    var match = to.match(/(\d{4})-(\d{2})-(\d{2})/);
    to = parseInt(match[1] + match[2] + match[3]);

    var regex = /\d{8}/i;
    $("#all > option").each(function(){
        $(this).show();
        var opt = this.value;
        var dateValue = parseInt(opt.match(regex));
        var test = dateValue < from || dateValue > to ;
        //alert("dateValue:"+dateValue+" test:"+test);
        if(test){
            $(this).hide();
        }
    }); 
    $("#all")[0].selectedIndex = 0;
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню