Reputation: 2953
I am looking for a way to write dynamic codes in Jquery.
Please take a look at these codes below and here is its jsfiddle
Everything works as expected, but Jquery codes repeats and kind of long! Is there any way to turn this Jquery to dymamic one.
Thanks!
HTML
<div class="tabs" id="tab-part1">Part 1</div>
<div class="tabs" id="tab-part2">Part 2</div>
<div class="tabs" id="tab-part3">Part 3</div>
<div class="tab-parts">
<div id="part1">
This is part 1
</div>
<div id="part2">
This is part 2
</div>
<div id="part3">
This is part3
</div>
</div>
JS
$(function () {
$('#tab-part1').click((event) => {
$(this).find('.tab-parts #part2, .tab-parts #part3').hide();
$(this).find('.tab-parts #part1').show();
});
$('#tab-part2').click((event) => {
$(this).find('.tab-parts #part1, .tab-parts #part3').hide();
$(this).find('.tab-parts #part2').show();
});
$('#tab-part3').click((event) => {
$(this).find('.tab-parts #part1, .tab-parts #part2').hide();
$(this).find('.tab-parts #part3').show();
});
});
Upvotes: 0
Views: 72
Reputation: 32537
Here's my take, based on not changing your html structure. This could be done better with a change to html structure.
HTML
<div class="tabs" id="tab-part1">Part 1</div>
<div class="tabs" id="tab-part2">Part 2</div>
<div class="tabs" id="tab-part3">Part 3</div>
<div class="tab-parts">
<div id="part1">
This is part 1
</div>
<div id="part2">
This is part 2
</div>
<div id="part3">
This is part 3
</div>
</div>
CSS
.tabs {
font-size: 20px;
font-weight: bold;
margin-right: 60px;
float: left;
}
#part2, #part3 {
display: none
}
.tab-parts {
width: 100%;
float:left;
margin-top: 20px
}
JS
$(function () {
$('div[id^="tab-part"]').on('click',function(e){
var part = $(this).attr('id').split('-')[1];
$('.tab-parts [id^="part"]').hide();
$('.tab-parts #'+part).show();
});
});
Upvotes: 0
Reputation: 2478
How does this look?
$(function () {
$(".tabs").click(function(e) {
var target = $(this).data("target");
$("#" + target).show();
$(".tab-parts").children().not("#" + target).hide();
});
});
.tabs {
font-size: 20px;
font-weight: bold;
margin-right: 60px;
float: left;
}
#part2, #part3 {
display: none
}
.tab-parts {
width: 100%;
float:left;
margin-top: 20px
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="tabs" data-target="part1">Part 1</div>
<div class="tabs" data-target="part2">Part 2</div>
<div class="tabs" data-target="part3">Part 3</div>
<div class="tab-parts">
<div id="part1">
This is part 1
</div>
<div id="part2">
This is part 2
</div>
<div id="part3">
This is part3
</div>
</div>
Upvotes: 1