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

Javascript-使用数据间隔、年份过滤器和输入过滤器进行表搜索,javascript,html,jquery,filter,html-table,Javascript,Html,Jquery,Filter,Html Table,我有一个使用jQuery的表和多过滤器搜索。过滤器支持相关搜索 我需要实现一个过滤器来搜索间隔日期(开始日期、结束日期)和一个过滤器来搜索所选年份,过滤器需要与其他过滤器相关 输入过滤器的类型必须是“include”,而不是像现在这样的“equals” 我是jquery新手,有人能帮我得到结果吗 我的HTML: <!DOCTYPE html> <html lang="en"> <head> <meta charse

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

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

  • 输入过滤器的类型必须是“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>
    
    css:

    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);
          }
    
      }
    
    }
    
    .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;
    
      }