2013-01-08 8 views
6

Quindi la mia domanda è questa. Ho un tavolo e sto nascondendo/mostrando le righe sulla base di una selezione di menu a discesa. Ciò che vorrebbe avere sono i 2 menu che lavorano insieme piuttosto che indipendentemente. Se seleziono un elemento nel primo menu a discesa, vorrei poter poi filtrare quell'elemento ulteriormente con il secondo menu a discesa e così via con qualsiasi altro menu a discesa. Ecco il codice che sto usando che funziona in modo indipendente al momento.Nascondi/Mostra righe in base a più selezioni a discesa (filtro)

<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

puoi pubblicare la tabella dei dati snippet troppo ... – Sandeep

+0

Stai cercando un vero frammento di dati dalla tabella o il codice che genera la tabella stessa. Scusa, mi piace addormentarmi alla tastiera qui. – Muttface

+0

è possibile ... – Thulasiram

risposta

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> 

si prega di trovare per DEMO

+0

hai bisogno di questo output? – Thulasiram

+0

Grazie, questo ha funzionato perfettamente per me. Molto apprezzato. – Muttface

+0

Come aggiornarlo per filtrare su un elenco separato da virgole nell'attributo dati? Se data-sports = "Chess, Cricket" e dal menu a tendina seleziono "Cricket" o "Chess", voglio che faccia parte del risultato. – theEUG

Problemi correlati