Javascript - 使用数据间隔、年份过滤器和输入过滤器的表格搜索

时间:2021-05-10 11:52:07

标签: javascript html jquery filter html-table

我有一个使用 jQuery 工作的表格和多个过滤器搜索。过滤器支持相关搜索。

  1. 我需要实现一个过滤器来搜索间隔日期(开始日期、结束日期)和一个过滤器来搜索所选年份,过滤器需要与其他过滤器相关。

  2. 输入过滤器需要输入“include”而不是像现在这样的“equals”。

我是 jquery 的新手,有人可以帮忙得到结果吗?

我的 HTML:

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Bank Holidays</title>
    <link rel="canonical" href="https://getbootstrap.com/docs/5.0/examples/sign-in/">   

    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6" crossorigin="anonymous">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <script src="https://kit.fontawesome.com/889e9318b0.js" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
</head>
<body>

<div class="container">  
      <table class="table">
        <thead>
          <tr class="filters">
            <th>                          
                <div id="1">
                  <div class="input-group">
                    <label for="exampleFormControlInput1" class="form-label col-md-6">Ricerca per:</label>
                        <select id="1" style="margin-bottom: 2%;" class="form-select form-select-sm" onchange="openInput(event,'data-filter');" aria-label="Default select example">
                          <option selected>Data</option>  
                          <option value="year">Anno</option>
                            <option value="range">Intervallo di date</option>
                        </select>
                        </div>
                      <input id="data-filter" class="form-control form-control" type="date"/>
                  </div>              
              
              <!--<select id="assigned-user-filter" class="form-control">
                <option>None</option>
                <option>Natale</option>
                <option>Pasqua</option>
                <option>Ferragosto</option>
                <option>Pasquetta</option>
                <option>2 Giugno</option>
              </select>-->
            </th>
            <th>Descrizione
              <div>
            <input id="descrizione-filter" class="form-control" type="text">
              <!--<select id="descrizione-filter" class="form-control">
                <option>Any</option>
                <option>Natale</option>
                <option>Pasqua</option>
                <option>Ferragosto</option>
                <option>Pasquetta</option>
                <option>Capodanno</option>
              </select>-->
            </th>
            <th>Luogo
              <select id="luogo-filter" class="form-control">
                <option>Tutti</option>
                <option>Nazionale</option>
                <option>Roma</option>
                <option>Milano</option>
                <option>Berlino</option>
              </select>
            </th>
            <th>Nazione
              <select id="nazione-filter" class="form-control">
                <option>Tutti</option>
                <option>Italia</option>
                <option>Francia</option>
                <option>Germania</option>
              </select>
            </th>
          </tr>
        </div>
        </thead>
      </table>
    <div class="panel panel-primary filterable">
      <div class="panel-heading">
        <h3 class="panel-title">Tasks</h3>
        <div class="pull-right"></div>
      </div>     
      <table id="task-list-tbl" class="table">
        <thead>
          <tr>
            <th>Data</th>
            <th>Descrizione</th>
            <th>Luogo</th>
            <th>Nazione</th>
            <th></th>
          </tr>
        </thead>        
        <tbody>          
          <tr
              class="task-list-row" 
              data-data="25/12/2025"
              data-descrizione="Natale"
              data-luogo="Nazionale"
              data-nazione="Francia">
            <td>25/12/2025</td>
            <td>Natale</td>
            <td>Nazionale</td>
            <td>Francia</td>
            <td><a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#editModal" data-bs-whatever="Modifica">Modifica</a>
              |
            <a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-whatever="Elimina">Elimina</a>
            </td>
          </tr>          
          <tr
              class="task-list-row" 
              data-data="25/12/2025"
              data-descrizione="Natale"
              data-luogo="Nazionale"
              data-nazione="Italia">
            <td>25/12/2025</td>
            <td>Natale</td>
            <td>Nazionale</td>
            <td>Italia</td>
            <td><a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#editModal" data-bs-whatever="Modifica">Modifica</a>
              |
            <a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-whatever="Elimina">Elimina</a>
            </td>
          </tr>
          <tr
              class="task-list-row" 
              data-data="25/12/2025"
              data-descrizione="Natale"
              data-luogo="Nazionale"
              data-nazione="Germania">
            <td>25/12/2025</td>
            <td>Natale</td>
            <td>Nazionale</td>
            <td>Germania</td>
            <td><a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#editModal" data-bs-whatever="Modifica">Modifica</a>
              |
            <a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-whatever="Elimina">Elimina</a>
            </td>
          </tr>
          <tr
              class="task-list-row" 
              data-data="25/12/2025"
              data-descrizione="Festa di Berlino"
              data-luogo="Berlino"
              data-nazione="Germania">
            <td>25/12/2025</td>
            <td>Festa di Berlino</td>
            <td>Berlino</td>
            <td>Germania</td>
            <td><a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#editModal" data-bs-whatever="Modifica">Modifica</a>
              |
            <a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-whatever="Elimina">Elimina</a>
            </td>
          </tr>         
          <tr
              class="task-list-row" 
              data-data="01/01/2025"
              data-descrizione="Capodanno"
              data-luogo="Nazionale"
              data-nazione="Germania">
            <td>01/01/2025</td>
            <td>Capodanno</td>
            <td>Nazionale</td>
            <td>Germania</td>
            <td><a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#editModal" data-bs-whatever="Modifica">Modifica</a>
              |
            <a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-whatever="Elimina">Elimina</a>
            </td>
          </tr>          
          <tr
              class="task-list-row" 
              data-data="25/12/2025"
              data-descrizione="Natale"
              data-luogo="Nazionale"
              data-nazione="Italia">
            <td>25/12/2025</td>
            <td>Natale</td>
            <td>Nazionale</td>
            <td>Italia</td>
            <td><a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#editModal" data-bs-whatever="Modifica">Modifica</a>
              |
            <a class="modalLink" type="submit" data-bs-toggle="modal" data-bs-target="#deleteModal" data-bs-whatever="Elimina">Elimina</a>
            </td>
          </tr>
        </tbody>
      </table>
    </div>
  </div>

<script src="prova.js"></script>
</body>
</html>

Javascript 代码:

var filters =  
  {
    data: null,
    descrizione: null,
    luogo: null,
    nazione: null,
  };

function updateFilters() {
  $('.task-list-row').hide().filter(function() {
    var
      self = $(this),
      result = true;

    Object.keys(filters).forEach(function (filter) {
      if (filters[filter] && (filters[filter] != 'Tutti')) {        
        result = result && filters[filter] === self.data(filter);
        console.log(self.data(filter));
      /*if(self.data(filter.includes(filters[filter])))){
        console.log('ciao');
      }*/}
    });
    return result;

    
  }).show();
}

function changeFilter(filterName) {
  console.log(filterName);
  filters[filterName] = this.value;
  updateFilters();
}

$('#data-filter').on('change', function() {
  changeFilter.call(this, 'data');
});

$('#descrizione-filter').on('keyup', function() {
  changeFilter.call(this, 'descrizione');
  
});

$('#luogo-filter').on('change', function() {
  changeFilter.call(this, 'luogo');
});

$('#nazione-filter').on('change', function() {
  changeFilter.call(this, 'nazione');
});

function openInput(e, id){
  if(e.target.value === "range"){
      let input = document.createElement("input")
      input.setAttribute("type","date");
      input.setAttribute("name", "valueRange");
      input.setAttribute("id", "newInput");
      input.setAttribute("class", "form-control");
      
      if(document.getElementById("data-filter").getAttribute("type") != "date"){
        document.getElementById("data-filter").setAttribute("type", "date");
      }
      //let i = document.getElementById("input1");
      //document.getElementById("input-data").setAttribute("style","")
      document.getElementById("1").appendChild(input);
      //input.insertAdjacentElement("afterend",i);
  }
  else if(e.target.value === 'year'){
      let data = new Date();
      if(document.getElementById("newInput")!=null){
          let input = document.getElementById("newInput");
          document.getElementById("1").removeChild(input);
      }
      document.getElementById("data-filter").setAttribute("type","number");
      document.getElementById("data-filter").setAttribute("value", data.getFullYear());
  }
  else{
    if(document.getElementById("newInput")!=null){

      let input = document.getElementById("newInput");
      document.getElementById("1").removeChild(input);

  }
    document.getElementById("data-filter").setAttribute("value", new Date());
      document.getElementById("data-filter").setAttribute("type","date");      

  }

}

function openInputInteger(e, id){

  if(e.target.value === "range"){
      let input = document.createElement("input")
      input.setAttribute("type","number");
      input.setAttribute("name", "valueRange");
      input.setAttribute("id", "newInput");
      input.setAttribute("style","width: 204px;")
      input.setAttribute("class", "form-control");
      document.getElementById(id+"1").appendChild(input);

  }
  else{
      if(document.getElementById("newInput")!=null){
          let input = document.getElementById("newInput");
          document.getElementById(id+"1").removeChild(input);
      }

  }

}

CSS:

.filterable {
    margin-top: 15px;
  }
  .filterable .panel-heading .pull-right {
    margin-top: -20px;
  }
  .filterable .filters input[disabled] {
    background-color: transparent;
    border: none;
    cursor: auto;
    box-shadow: none;
    padding: 0;
    height: auto;
  }
  .filterable .filters input[disabled]::-webkit-input-placeholder {
    color: #333;
  }
  .filterable .filters input[disabled]::-moz-placeholder {
    color: #333;
  }
  .filterable .filters input[disabled]:-ms-input-placeholder {
    color: #333;
  }
  
  th:hover{
          cursor:pointer;  
      }
  th i:hover{
    color:green
  }

  .modalLink {

    text-decoration: none;

  }

0 个答案:

没有答案