根据选择值

时间:2017-01-09 18:06:03

标签: javascript jquery html arrays jquery-selectors

我需要根据选择值过滤表格行。当选择的值为“”(空)时,必须隐藏表。如果select值为1,则表必须可见,并且必须仅显示第一个表列保持值为1的行。

问题是这个id列包含多个id,如1,2。 由于我的JQuery技能不是最好的,我需要你们帮我完成我的代码

我的选择器

<select id='mySelector'>
   <option value="">Please Select</option>
   <option value='1'>A</option>
   <option value='2'>B</option>
   <option value='3'>C</option>
</select>

我的表

<table id='myTable'>
   <thead>
      <tr>
         <th>ids</th>
         <th>name</th>
         <th>address</th>
      </tr>
   </thead>
   <tbody>
      <tr>
         <td>1,2</td>
         <td>Jhon</td>
         <td>Doe</td>
      </tr>
      <tr>
         <td>3</td>
         <td>Mike</td>
         <td>Poet</td>
      </tr>
      <tr>
         <td>2,3</td>
         <td>Ace</td>
         <td>Ventura</td>
      </tr>
   </tbody>
 </table>

我的剧本

$(document).ready(function($) {
    $('table').hide();
    $('#mySelector').change( function(){
      $('table').show();
      var selection = $(this).val();
      var dataset = $('#myTable').find('tr');
          $.each(dataset, function(index, item) {
            //help
          });
    });
});

这里正在运作plunker

如果您需要任何其他信息,请告诉我,我会提供。提前谢谢。

4 个答案:

答案 0 :(得分:5)

您可以根据包含 id td的内容过滤行:

  1. 您的数据集必须为$('#myTable tbody').find('tr'),因此不会显示/隐藏thead

  2. 首先使用tr

  3. 显示所有表格dataset.show()
  4. 现在使用此功能过滤掉您不需要显示的tr

    dataset.filter(function(index, item) {
      return $(item).find('td:first-child').text().split(',').indexOf(selection) === -1;
    }).hide();
    
  5. 见下面的演示:

    &#13;
    &#13;
    $(document).ready(function($) {
      $('table').hide();
      $('#mySelector').change(function() {
        $('table').show();
        var selection = $(this).val();
        var dataset = $('#myTable tbody').find('tr');
        // show all rows first
        dataset.show();
        // filter the rows that should be hidden
        dataset.filter(function(index, item) {
          return $(item).find('td:first-child').text().split(',').indexOf(selection) === -1;
        }).hide();
    
      });
    });
    &#13;
    /* Styles go here */
    
    table {
      border-collapse: collapse;
      width: 100%;
    }
    th,
    td {
      padding: 8px;
      text-align: left;
      border-bottom: 1px solid #ddd;
    }
    .styled-select.slate {
      height: 34px;
      width: 240px;
    }
    &#13;
    <script src="https://code.jquery.com/jquery-2.2.4.js"></script>
    <script src="script.js"></script>
    
    <select id='mySelector' class="styled-select slate">
      <option value="">Please Select</option>
      <option value='1'>A</option>
      <option value='2'>B</option>
      <option value='3'>C</option>
    </select>
    <br>
    <br>
    <br>
    <table id='myTable'>
      <thead>
        <tr>
          <th>ids</th>
          <th>name</th>
          <th>address</th>
        </tr>
      </thead>
      <tbody>
        <tr>
          <td>1,2</td>
          <td>Jhon</td>
          <td>Doe</td>
        </tr>
        <tr>
          <td>3</td>
          <td>Mike</td>
          <td>Poet</td>
        </tr>
        <tr>
          <td>2,3</td>
          <td>Ace</td>
          <td>Ventura</td>
        </tr>
      </tbody>
    </table>
    &#13;
    &#13;
    &#13;

答案 1 :(得分:1)

尝试使用以下代码

$("#mySelector").on("change",
           function(){
               var a = $(this).find("option:selected").html();

               $("table tr td:first-child").each(
                   function(){
                       if($(this).html() != a){
                           $(this).parent().hide();
                       }
                       else{
                           $(this).parent().show();
                       }
                   });
           }); 

答案 2 :(得分:1)

这是一个可以测试here

的解决方案
partners

答案 3 :(得分:1)

使用:contains()选择器的简短解决方案:

$(document).ready(function($) {
    $('table').hide();

    $('#mySelector').change( function(){
      var selection = $(this).val();
      $('table')[selection? 'show' : 'hide']();

      if (selection) {  // iterate only if `selection` is not empty
        $.each($('#myTable tbody tr'), function(index, item) {
          $(item)[$(item).is(':contains('+ selection  +')')? 'show' : 'hide']();
        });
      }

    });
});

测试链接:https://plnkr.co/edit/zNQNFVBIPSyPjEyU7I1J?p=preview

http://api.jquery.com/contains-selector/