2013-01-08 117 views
6

所以我的问题是这样的。我有一张桌子,我根据下拉菜单选择隐藏/显示行。想要的是2个菜单一起工作,而不是独立工作。如果我在第一个下拉列表中选择一个项目,我希望能够随后使用第二个下拉列表进一步过滤该项目,并以其他下拉菜单为准。这是我正在使用的代码,目前独立工作。隐藏/显示基于多个下拉选择的行(过滤)

<script> 
$(document).ready(function(){ 
$('select#age').bind('change',function(){ 
    if($(this).val()=='Show All'){ 
    $('td.age').parent().show(); 
    }else{ 
    $('td.age').parent().hide(); 
    $('td.age:contains("'+$(this).val()+'")').parent().show(); 
    } 
    $('#counts').html($('table.data_table tr:visible').length-1 + ' Registered Kids')  
}) 
    $('select#sport').bind('change',function(){ 
    if($(this).val()=='Show All'){ 
    $('td.sport').parent().show(); 
    }else{ 
    $('td.sport').parent().hide(); 
    $('td.sport:contains("'+$(this).val()+'")').parent().show(); 
    } 
    $('#counts').html($('table.data_table tr:visible').length-1 + ' Registered Kids')  
}) 
}) 
</script> 
+0

你可以张贴表的数据片断... – Sandeep

+0

您是否正在寻找类似于表格中的实际数据片段或生成表格本身的代码。对不起,我喜欢在键盘上睡着。 – Muttface

+0

有可能... – Thulasiram

回答

5
String.prototype.replaceAll = function(search, replacement) { 
    var target = this; 
    return target.replace(new RegExp(search, 'g'), replacement); 
}; 

$(document).ready(function() { 
    var ddlFilterTableRow = $('select.ddlFilterTableRow'), 
     headerCount = $('#headerCount'); 
      headerCount.html($('#tableRegisterKids').find('.Row').length + ' Registered Kids'); 

    ddlFilterTableRow.on('change', function() { 
     ddlFilterTableRow.attr('disabled', 'disabled'); 

     var records = $('#tableRegisterKids').find('.Row'); 
     records.hide(); 

     var critriaAttributes = []; 
     ddlFilterTableRow.each(function() { 
      var $this = $(this), 
       $selectedLength = $this.find(':selected').length, 
       $critriaAttribute = ''; 

      if ($selectedLength > 0 && $this.val() != '0') { 
       if ($selectedLength == 1) { 
        $critriaAttribute += '[data-' + $this.data('attribute') + '*="' + $this.val() + '"]'; 
       } else { 
        var $startDataAttribute = '[data-' + $this.data('attribute') + '*="', 
         $endDataAttribute = '"]', 
         $selectedValues = $this.val().toString(); 

        $critriaAttribute += $startDataAttribute + $selectedValues.replaceAll(',', ($endDataAttribute + ',' + $startDataAttribute)) + $endDataAttribute; 
       } 
       critriaAttributes.push($critriaAttribute); 
      } 
     }); 

     var $showRecords = records; 
     if (critriaAttributes.length > 0) { 
      $.each(critriaAttributes, function(i, filterValue) { 
       $showRecords = $showRecords.filter(filterValue); 
      }); 
     } 
     $showRecords.show(); 

     headerCount.html($showRecords.length + ' Registered Kids'); 

     ddlFilterTableRow.removeAttr('disabled'); 
    }); 
}); 

// ====================================== ===== //

<select id="ddlAge" class="ddlFilterTableRow" data-attribute="age"> 
    <option value="0">Select All</option> 
    <option value="10">10</option> 
    <option value="8">8</option> 
    <option value="6">6</option> 
</select> 
<select id="ddlSport" class="ddlFilterTableRow" data-attribute="sports"> 
    <option value="0">Select All</option> 
    <option value="Foot Ball">Foot Ball</option> 
    <option value="Chess">Chess</option> 
    <option value="Cricket">Cricket</option> 
</select> 
<h1 id="headerCount"></h1> 
<table id="tableRegisterKids"> 
    <tr> 
     <th>Fullname</th> 
     <th>Age</th> 
     <th>Sport</th> 
    </tr> 
    <tr class="Row" data-age="10" data-sports="Foot Ball"> 
     <td>Thulasiram.S</td> 
     <td>10</td> 
     <td>Foot Ball</td> 
    </tr> 
    <tr class="Row" data-age="8" data-sports="Cricket"> 
     <td>ST Ram</td> 
     <td>8</td> 
     <td>Cricket</td> 
    </tr> 
    <tr class="Row" data-age="6" data-sports="Chess"> 
     <td>Ram Kumar.S</td> 
     <td>6</td> 
     <td>Chess</td> 
    </tr> 
    <tr class="Row" data-age="8" data-sports="Chess"> 
     <td>Dinesh Kumar.S</td> 
     <td>8</td> 
     <td>Chess</td> 
    </tr> 
    <tr class="Row" data-age="6" data-sports="Foot Ball"> 
     <td>Raja Ram.S</td> 
     <td>6</td> 
     <td>Foot Ball</td> 
    </tr> 
    <tr class="Row" data-age="10" data-sports="Chess"> 
     <td>Priya</td> 
     <td>10</td> 
     <td>Chess</td> 
    </tr> 
</table> 

请找到DEMO

+0

你需要这个输出吗? – Thulasiram

+0

谢谢,这对我来说非常合适。非常感激。 – Muttface

+0

我如何更新这个数据属性中的逗号分隔列表上的过滤?如果数据体育=“国际象棋,板球”,并从下拉列表中选择“板球”或“国际象棋”,我希望这是结果的一部分。 – theEUG

相关问题