首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用jQuery从选项中筛选列中的数据

使用jQuery从选项中筛选列中的数据
EN

Stack Overflow用户
提问于 2020-07-23 08:33:59
回答 1查看 156关注 0票数 1

我处理过滤,我有问题,我有4个选项输入,其中我有一些数据需要在表中过滤,现在我只为一个列过滤数据,但问题是如果我再添加一个过滤器,脚本将不能工作,并且过滤来自上一个选定值的数据。但我需要,如果我有2-4选择的值,在选项数据是过滤。

我的代码: JS:

代码语言:javascript
复制
$("#cancelFilters").hide();

$('#filterButton').click(function () {
    getSelectedVal()
    filterData()
    filters = [];
    $("#cancelFilters").fadeIn();
});

var filters = [];

function getSelectedVal() {
    var materialCode = $('#materialCode option:selected').text()
    var plantCode = $('#plantCode option:selected').text()
    var vsCode = $('#vsCode option:selected').text()
    var status = $('#statusCode option:selected').text()

    applyFilter(materialCode, 1)
    applyFilter(plantCode, 2)
    applyFilter(vsCode, 3)
    applyFilter(status, 4)
}

function applyFilter(value, id) {
    if (value)
        filters.push('.column' + id + ':contains(' + value + ')');
}


function filterData() {
    if (filters.length > 0) {
        var rows = $("#orderListData").find("tr").hide();

        filters.forEach(filter => {
            $("#orderListData td" + filter).parent().show();
        })

    }
}

$('#cancelFilters').click(function () {
    var $rows = $('#orderListData tr');
    $rows.show()
    $("#cancelFilters").fadeOut();
});

JSFIddle - https://jsfiddle.net/qunzorez/k3ygL07f/11/

因此,如果在选项3中,u将选择023并点击add过滤器,它将工作,但是如果我选择023和选项4订好的,它将只过滤已预订的状态,问题在哪里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-23 11:33:11

通过对每个过滤器执行$("#orderListData td" + filter).parent().show(),您实际上显示了与其中一个筛选器匹配的每一行。同时,您只需要显示那些可以满足所有过滤器的行。

因此,与其循环遍历filters并检查是否有任何td元素满足它,不如循环遍历rows并检查它是否满足每个过滤器。

使用此代码进行此操作(只更改filterData函数)

代码语言:javascript
复制
    $("#cancelFilters").hide();

    $('#filterButton').click(function () {
      getSelectedVal()
      filterData()
      filters = [];
      $("#cancelFilters").fadeIn();
    });

    var filters = [];

    function getSelectedVal() {
      var materialCode = $('#materialCode option:selected').text()
      var plantCode = $('#plantCode option:selected').text()
      var vsCode = $('#vsCode option:selected').text()
      var status = $('#statusCode option:selected').text()

      applyFilter(materialCode, 1)
      applyFilter(plantCode, 2)
      applyFilter(vsCode, 3)
      applyFilter(status, 4)
    }

    function applyFilter(value, id) {
      if (value)
        filters.push('.column' + id + ':contains(' + value + ')');
    }


    function filterData() {
      if (filters.length > 0) {
        var rows = $("#orderListData").find("tr");
        rows.hide();
        
        //Check if any row satisfy all filters 
        $.each(rows, (i, row) => {
          if (filters.every(filter => $(row).find(filter).length)) {
            $(row).show();
          }
        })

      }
    }

    $('#cancelFilters').click(function () {
      var $rows = $('#orderListData tr');
      $rows.show()
      $("#cancelFilters").fadeOut();
    });
代码语言:javascript
复制
    .row {
      width: 100%;
      display: flex;
      flex-wrap: wrap;
    }

    .row::after {
      display: table;
      clear: both;
      content: "";
    }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="row">
    <div class="col-3"> <input class="form-control" type="text" id="search" placeholder="Search for ...""></div>

        <div class=" col-2">
      <select class="form-control secondary-select" id="materialCode">
        <option></option>
        <option>16014344C</option>
        <option>16016398A</option>
        <option>16009838A</option>
      </select>
      <p><strong>Material Code</strong></p>
    </div>
    <div class="col-2">
      <select class="form-control secondary-select" id="plantCode">
        <option></option>
        <option>0119</option>
        <option>0379</option>
      </select>
      <p><strong>Plant Code</strong></p>
    </div>
    <div class="col-2">
      <select class="form-control secondary-select" id="vsCode">
        <option></option>
        <option>023</option>
        <option>0379</option>
      </select>
      <p><strong>Value Stream Code</strong></p>
    </div>
    <div class="col-2">
      <select class="form-control secondary-select" id="statusCode">
        <option></option>
        <option>BOOKED</option>
        <option>RELEASED</option>
      </select>
      <p><strong>Status</strong></p>
    </div>
    <div class="col-1">
      <button id="filterButton" class="button button-clear butt-heith">
        Apply filters
      </button>
    </div>
  </div>

  <button id="cancelFilters" class="button button-deactivate float-right">
    Cancel filters
  </button>

  <table class="table-editor" id="ordersList">
    <thead>
      <tr>
        <th>Production order code</th>
        <th>Material code</th>
        <th>Target quantity</th>
        <th>Plant code</th>
        <th>Value stream code</th>
        <th>Status</th>
        <th>Release date</th>
        <th>Activation date</th>
        <th>Booking date</th>
        <th>TPT (d)</th>
      </tr>
    </thead>
    <tbody id="orderListData">
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20943">14298947</a>
        </td>
        <td class="column1">
          11027174A
        </td>
        <td>
          1
        </td>
        <td class="column2">

        </td>
        <td class="column3">
          023
        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 06:57:42
        </td>

        <td></td>

        <td>
          2020-03-02 08:12:22
        </td>
        <td>
          0.1 </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20944">80150671</a>
        </td>
        <td class="column1">
          11019682A
        </td>
        <td>
          800
        </td>
        <td class="column2">

        </td>
        <td class="column3">
          023
        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 08:02:32
        </td>

        <td></td>

        <td>
          2020-03-02 15:30:51
        </td>
        <td>
          0.3 </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20945">80150672</a>
        </td>
        <td class="column1">
          15000987A
        </td>
        <td>
          503
        </td>
        <td class="column2">

        </td>
        <td class="column3">

        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 08:28:04
        </td>

        <td></td>

        <td>
          2020-03-13 00:00:00
        </td>
        <td>
          10.6 </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20946">80150673</a>
        </td>
        <td class="column1">
          11011572E
        </td>
        <td>
          153
        </td>
        <td class="column2">

        </td>
        <td class="column3">
          023
        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 08:30:32
        </td>

        <td></td>

        <td>
          2020-03-06 00:00:00
        </td>
        <td>
          3.6 </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20947">80150674</a>
        </td>
        <td class="column1">
          18300753C
        </td>
        <td>
          153
        </td>
        <td class="column2">

        </td>
        <td class="column3">

        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 08:30:57
        </td>

        <td></td>

        <td>
          2020-03-10 00:00:00
        </td>
        <td>
          7.6 </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20948">80150675</a>
        </td>
        <td class="column1">
          11014966C
        </td>
        <td>
          153
        </td>
        <td class="column2">

        </td>
        <td class="column3">
          023
        </td>
        <td class="column4">
          RELEASED
        </td>
        <td>
          2020-03-02 08:31:26
        </td>

        <td></td>

        <td></td>
        <td>
        </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20949">80150676</a>
        </td>
        <td class="column1">
          11014264D
        </td>
        <td>
          79
        </td>
        <td class="column2">

        </td>
        <td class="column3">

        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 08:33:48
        </td>

        <td></td>

        <td>
          2020-03-06 00:00:00
        </td>
        <td>
          3.6 </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20950">80150677</a>
        </td>
        <td class="column1">
          18300753C
        </td>
        <td>
          79
        </td>
        <td class="column2">

        </td>
        <td class="column3">
          023
        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 08:34:16
        </td>

        <td></td>

        <td>
          2020-03-10 00:00:00
        </td>
        <td>
          7.6 </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20951">80150678</a>
        </td>
        <td class="column1">
          11020109B
        </td>
        <td>
          79
        </td>
        <td class="column2">

        </td>
        <td class="column3">

        </td>
        <td class="column4">
          RELEASED
        </td>
        <td>
          2020-03-02 08:34:38
        </td>

        <td></td>

        <td></td>
        <td>
        </td>

      </tr>
      <tr>
        <td>
          <a href="/ProductionOrderManagement/ProductionOrderOperations?productionOrderId=20952">80150679</a>
        </td>
        <td class="column1">
          15001454B
        </td>
        <td>
          100
        </td>
        <td class="column2">

        </td>
        <td class="column3">
          023
        </td>
        <td class="column4">
          BOOKED
        </td>
        <td>
          2020-03-02 08:37:59
        </td>

        <td></td>

        <td>
          2020-03-12 00:00:00
        </td>
        <td>
          9.6 </td>

      </tr>
    </tbody>
  </table>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63050132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档