简体   繁体   中英

How to Filter <li> based on drop down values in jquery

I need to filter the list item which is less than 5 by selecting a option from the drop down

Html Part

<div data-role="content">
 <select name="select-choice-1" id="select-choice-1">
     <option value="">select</option>
    <option value="5" >less than 5</option>
    <option value="10" >less than 10</option>
</select>
<div data-role="fieldcontain">    
    <ul data-role="listview">
        <li data-filtertext="4" class="de"><a href=#>Audi</a></li>
        <li data-filtertext="3" class="de"><a href=#>BMW</a></li>
        <li data-filtertext="2" class="it"><a href=#>Ferrari</a></li>
        <li data-filtertext="7" class="it"><a href=#>Lamborghini</a></li>
        <li data-filtertext="9" class="it"><a href=#>Maserati</a></li>
    </ul>
</div>

Script part

$('#select-choice-1').change(function(){
var value = $('#select-choice-1').val();
$("ul").find("li").hide()
$("ul").find("li[data-filtertext<"+value+"]").show();

You can use filter() for filtering jQuery object based on condition

 $('#select-choice-1').change(function() { var val = this.value; $("ul li").hide().filter(function() { return parseInt($(this).data('filtertext'),10) < val; }).show(); }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div data-role="content"> <select name="select-choice-1" id="select-choice-1"> <option value="">select</option> <option value="5">less than 5</option> <option value="10">less than 10</option> </select> <div data-role="fieldcontain"> <ul data-role="listview"> <li data-filtertext="4" class="de"><a href=#>Audi</a> </li> <li data-filtertext="3" class="de"><a href=#>BMW</a> </li> <li data-filtertext="2" class="it"><a href=#>Ferrari</a> </li> <li data-filtertext="7" class="it"><a href=#>Lamborghini</a> </li> <li data-filtertext="9" class="it"><a href=#>Maserati</a> </li> </ul> </div> 

You can use filter() to achieve this:

$('#select-choice-1').change(function() {
    var value = $(this).val();
    $('li').hide().filter(function() {
        return parseInt($(this).data('filtertext'), 10) < parseInt(value, 10);
    }).show();
});

Example fiddle

DEMO

You can do this too

$('#select-choice-1').change(function(){
var value = $(this).val();
$("ul").find("li").hide()
    $.each($("ul").find("li"),function(){
    //iterate through each li and check its filtertext value is < value
        if($(this).data('filtertext')<value)
            $(this).show();
    });
});
$('#select-choice-1').change(function(){
 var value = $('#select-choice-1').val();
 $("ul li").hide();
 $("ul li").each(function(){
   data = $(this).attr('data-filtertext');
   if(typeof data == 'undefined' || data == ''){
      $("ul li").show();
   }else if(data < value){
    $(this).show();
   }
 });    
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM