Reputation: 274
I'm trying to filter the divs below .row-body
to only show when the .sessionactivity
text matches the selected text from the select dropdown. So in the example below the second .row-body
div would be removed, see jQuery...
<select class="select-activity">
<option>Activity One</option>
<option>Activity Two</option>
<option>Activity Three</option>
</select>
<div id="today">
<div class="row-body">
<div class="sessionactivity">Activity One</div>
<div class="sessionlocation">The Swimming Pool</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Two</div>
<div class="sessionlocation">The Main Hall</div>
</div>
</div>
In the jQuery I've added the string 'Activity One' but I need that to come dynamically from the select selected text which is where I'm stuck.
$('.select-activity').click(function() {
$('.sessionactivity').filter(function() {
return $.trim($(this).text()) !== 'Activity One';
}).parent().remove();
});
After some research the following snippet seems to be the way to go but I'm struggling to put it into context. Any help would be great!
$(".select-actvity").children("option").filter(":selected").text()
Upvotes: 3
Views: 1320
Reputation: 1546
Here is how you can do it.
you can get selected values by $(this).val()
in change event of dropdown.
And at the end manually triggering change event by calling $(".select-activity").change();
for initial selection.
$(".select-activity").change(function() {
let filterVal = $(this).val();
$('.row-body').hide();
$('.sessionactivity').filter(function() {
return $.trim($(this).text()) === filterVal;
}).parent().show();
});
$(".select-activity").change();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="select-activity">
<option value="Activity One">Activity One</option>
<option value="Activity Two">Activity Two</option>
<option value="Activity Three">Activity Three</option>
</select>
<div id="today">
<div class="row-body">
<div class="sessionactivity">Activity One</div>
<div class="sessionlocation">The Swimming Pool</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Two</div>
<div class="sessionlocation">The Main Hall</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Three</div>
<div class="sessionlocation">The Other Hall</div>
</div>
</div>
Upvotes: 0
Reputation: 76
You are missing a "<" sign infront of option>Activity One</option>
<select class="select-activity">
<option>Activity One</option>
<option>Activity Two</option>
<option>Activity Three</option>
</select>
<div id="today">
<div class="row-body">
<div class="sessionactivity">Activity One</div>
<div class="sessionlocation">The Swimming Pool</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Two</div>
<div class="sessionlocation">The Main Hall</div>
</div>
</div>
jQuery
$( ".select-activity" ).change(function() {
var selected=$(this).val();
$('.sessionactivity').filter(function(){
return $.trim($(this).text()) !==selected;
}).parent().remove();
});
Upvotes: 0
Reputation: 30739
You can avoid using filter()
and simply use :contains()
to check the content of the div
with the selected text:
$(".select-activity").click(function() {
var text = $.trim($('.select-activity option:selected').text());
$('.row-body').hide();
$('.row-body').find('div:contains('+text+')').parent().show();
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select class="select-activity">
<option>Activity One</option>
<option>Activity Two</option>
<option>Activity Three</option>
</select>
<div id="today">
<div class="row-body">
<div class="sessionactivity">Activity One</div>
<div class="sessionlocation">The Swimming Pool</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Two</div>
<div class="sessionlocation">The Main Hall</div>
</div>
<div class="row-body">
<div class="sessionactivity">Activity Three</div>
<div class="sessionlocation">The Main Hall</div>
</div>
</div>
Upvotes: 2