Note that there are some explanatory texts on larger screens.

plurals
  1. POHow do I filter results with multiple select groups using jQuery?
    primarykey
    data
    text
    <p>I have two options that I am trying to filter between now, but will be adding in a third and maybe a fourth later on (for example: right now I am filtering between prices and reviews but will want to add more prices to the list and also another filter category like "rating" which would consist of 3, 4, or 5 stars).</p> <p>Using the logic that I have listed below works fine, but I feel it will get really long and complicated (and unnecessary) as I go. I know there is a way to refactor the code I'm just wondering what the best way to go about it would be? HTML:</p> <pre><code> &lt;select class="deals"&gt; &lt;option value="deals-all"&gt;All deals&lt;/option&gt; &lt;option value="50"&gt;$50&lt;/option&gt; &lt;option value="25"&gt;$25&lt;/option&gt; &lt;/select&gt; &lt;select class="reviews"&gt; &lt;option value="reviews-all"&gt;All reviews&lt;/option&gt; &lt;option value="reviews-positive"&gt;Positive reviews&lt;/option&gt; &lt;option value="reviews-negative"&gt;Negative reviews&lt;/option&gt; &lt;/select&gt; </code></pre> <p>jQuery</p> <pre><code> $('.reviews, .deals').change(function() { var reviewsVal = $('.reviews :selected').val(); var dealsVal = $('.deals :selected').val(); if((reviewsVal == 'reviews-all') &amp;&amp; (dealsVal == 'deals-all')) { $('.review-positive').show(); $('.review-negative').show(); $('.deals-25').show(); $('.deals-50').show(); } else if((dealsVal == '50') &amp;&amp; (reviewsVal == 'reviews-positive')) { $('.review-negative.deals-50').hide(); $('.review-positive.deals-50').show(); $('.review-negative.deals-25').hide(); $('.review-positive.deals-25').hide(); } else if((dealsVal == '50') &amp;&amp; (reviewsVal == 'reviews-negative')) { $('.review-negative.deals-50').show(); $('.review-positive.deals-50').hide(); $('.review-negative.deals-25').hide(); $('.review-positive.deals-25').hide(); } else if((dealsVal == '25') &amp;&amp; (reviewsVal == 'reviews-positive')) { $('.review-negative.deals-50').hide(); $('.review-positive.deals-50').hide(); $('.review-negative.deals-25').hide(); $('.review-positive.deals-25').show(); } else if((dealsVal == '25') &amp;&amp; (reviewsVal == 'reviews-negative')) { $('.review-negative.deals-50').hide(); $('.review-positive.deals-50').hide(); $('.review-negative.deals-25').show(); $('.review-positive.deals-25').hide(); } else if((dealsVal == 'deals-all') &amp;&amp; (reviewsVal == 'reviews-positive')) { $('.review-negative.deals-50').hide(); $('.review-positive.deals-50').show(); $('.review-negative.deals-25').hide(); $('.review-positive.deals-25').show(); } else if((dealsVal == 'deals-all') &amp;&amp; (reviewsVal == 'reviews-negative')) { $('.review-negative.deals-50').show(); $('.review-positive.deals-50').hide(); $('.review-negative.deals-25').show(); $('.review-positive.deals-25').hide(); } else if((dealsVal == '50') &amp;&amp; (reviewsVal == 'reviews-all')) { $('.review-negative.deals-50').show(); $('.review-positive.deals-50').show(); $('.review-negative.deals-25').hide(); $('.review-positive.deals-25').hide(); } else if((dealsVal == '25') &amp;&amp; (reviewsVal == 'reviews-all')) { $('.review-negative.deals-50').hide(); $('.review-positive.deals-50').hide(); $('.review-negative.deals-25').show(); $('.review-positive.deals-25').show(); } else { $('.review-positive').show(); $('.review-negative').show(); $('.deals-25').show(); $('.deals-50').show(); } }); $('.reviews-positive').click(function() { $('.review-negative').hide(); $('.review-positive').show(); }); $('.reviews-negative').click(function() { $('.review-positive').hide(); $('.review-negative').show(); }); });​ </code></pre> <p>Hopefully you can see what I am going for, thanks for any input.</p> <p>*EDIT: jsfiddle: <a href="http://jsfiddle.net/TXywp/1/" rel="nofollow">http://jsfiddle.net/TXywp/1/</a></p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload