jQuery 具有多选选项的过滤器

jQuery filter with multiselect option

如何在 jquery 中过滤多个 select?

如果我有这样的 table :

$('#mask').on('change', function(){
  var isiwak = $('.wak').val();
  var isi = $("#mask").val();


  if(isiwak=="allwak" && isi == "all"){
    $(".allshow").show();
  } else {
    $("td:not(."+isi+")").parent().hide();
    $("."+isi).parent().show();
  }
});

//OnChange waktu 
$('.wak').on('change', function(){
  var isiwak = $('.wak').val();
  var isi = $("#mask").val();


  if(isiwak=="allwak" && isi == "all"){
    $(".allshow").show();
  } else {
    $("td:not(."+isiwak+")").parent().hide();
    $("."+isiwak).parent().show();
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table border="1">
  <thead>
    <tr>
      <th>No</th><th>Nama Maskapai</th><th>Jam Terbang</th><th>Action</th>
    </tr>
  </thead>
  <tbody id="data">
    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="pagi">02:09</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="a">a</td>
      <td class="pagi">01:08</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="siang">12:12</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow">
      <td class="num"></td>
      <td class="c">c</td>
      <td class="malam">19:20</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="pagi">09:12</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow">
      <td class="num"></td>
      <td class="c">c</td>
      <td class="pagi">10:20</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="c">c</td>
      <td class="siang">12:12</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow">
      <td class="num"></td>
      <td class="a">a</td>
      <td class="malam">19:20</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="a">a</td>
      <td class="siang">12:12</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>

    <tr class="allshow">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="pagi">19:20</td>
      <td><a href="#" onclick="deleteRows(this)">Delete</a> <a href="#" class="naik">Up</a> <a href="#" class="turun">Down</a></td>
    </tr>
  </tbody>
</table>

<select id="mask">
  <option value="all"> -Pilih Maskapai- </option>
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
</select>

<select class="wak">
  <option value="allwak"> -Pilih Waktu- </option>
  <option value="pagi">pagi</option>
  <option value="siang">siang</option>
  <option value="malam">malam</option>
</select>

我想用两个 select 进行过滤,第一个 select 用于 'nama maskapai',第二个 select 用于 'jam terbang',其中 'jam terbang' 有class 'pagi', 'siang', 'malam'.

我想使用 2 select 如果我 select 'nama maskapai' 它们将显示所有 'nama maskapai' 以及 select.

此代码只能使用一个 select 选项进行过滤。

您只能创建一个过滤函数,如下所示:

$(document).ready(function() {
  $('#mask').on('change', function() {
    filter();
  });

  //OnChange waktu 
  $('.wak').on('change', function() {
    filter();
  });

  function filter() {
    var isiwak = $('.wak').val();
    var isi = $("#mask").val();

    var $all = $(".allshow");
    $all.hide()

    if (isiwak === "allwak" && isi === "all") {
      $all.show();
    } else if (isiwak === "allwak" && isi !== "all") {
      $all.children("." + isi).parent().show()
    } else if (isiwak !== "allwak" && isi === "all") {
      $all.children("." + isiwak).parent().show()
    } else {
      $all.children("." + isiwak).parent().children("." + isi).parent().show();
    }

  }

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table border="1">
  <thead>
    <tr>
      <th>No</th>
      <th>Nama Maskapai</th>
      <th>Jam Terbang</th>
      <th>Action</th>
    </tr>
  </thead>
  <tbody id="data">
    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="pagi">02:09</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="a">a</td>
      <td class="pagi">01:08</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="siang">12:12</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow">
      <td class="num"></td>
      <td class="c">c</td>
      <td class="malam">19:20</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="pagi">09:12</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow">
      <td class="num"></td>
      <td class="c">c</td>
      <td class="pagi">10:20</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="c">c</td>
      <td class="siang">12:12</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow">
      <td class="num"></td>
      <td class="a">a</td>
      <td class="malam">19:20</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow" style="">
      <td class="num"></td>
      <td class="a">a</td>
      <td class="siang">12:12</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
    <tr class="allshow">
      <td class="num"></td>
      <td class="b">b</td>
      <td class="pagi">19:20</td>
      <td>
        <a href="#" onclick="deleteRows(this)">Delete</a>
        <a href="#" class="naik">Up</a>
        <a href="#" class="turun">Down</a>
      </td>
    </tr>
  </tbody>
</table>
<select id="mask">
  <option value="all">-Pilih Maskapai-</option>
  <option value="a">a</option>
  <option value="b">b</option>
  <option value="c">c</option>
</select>
<select class="wak">
  <option value="allwak">-Pilih Waktu-</option>
  <option value="pagi">pagi</option>
  <option value="siang">siang</option>
  <option value="malam">malam</option>
</select>

在最后一个 else 中过滤一个 select,然后获取结果并过滤第二个。

这里是 plunker 如果你想要的话。

您也可以使用这个 fiddle:

JS:

$('#mask').on('change', function () {
            var isiwak = $('.wak :selected').val();
            var isi = $("#mask :selected").val();


            if (isiwak == "allwak" && isi == "all") {
                $(".allshow").show();
            } else {
                $("td:not(." + isi + ")").parent().hide();
                $("." + isi).parent().show();
            }
        });

        //OnChange waktu 
        $('.wak').on('change', function () {
            var isiwak = $('.wak :selected').val();
            var isi = $("#mask :selected").val();
            if (isiwak == "allwak" && isi == "all") {
                $(".allshow").show();
            } else {
                $('tr').each(function () {

                    if ($(this).find('.' + isiwak).length > 0 && $(this).find('.' + isi).length > 0) {
                            $(this).show();                        
                    }
                    else if ($(this).attr('class') == undefined) {
                        $(this).show();
                    }
                    else {
                        $(this).hide();
                    }
                });
            }
        });