Reputation: 5095
I was wondering what is the best way to shorten or clean up an if else statement such as this:
if($(this).hasClass("home")) {
$("body").addClass("home");
} else if($(this).hasClass("tasks")) {
$("body").addClass("tasks");
} else if($(this).hasClass("roadmap")) {
$("body").addClass("roadmap");
} else if($(this).hasClass("staff")) {
$("body").addClass("staff");
} else if($(this).hasClass("timesheet")) {
$("body").addClass("timesheet");
} else if($(this).hasClass("global-tasks")) {
$("body").addClass("global-tasks");
} else if($(this).hasClass("deleted-tasks")) {
$("body").addClass("deleted-tasks");
}
Upvotes: 0
Views: 39
Reputation: 24965
Using filter to get the first class to add.
var classes = [ 'home', 'tasks', 'roadmap', 'staff', 'timesheet', 'global-tasks', 'deleted-tasks' ];
var $thingToTest = $('.thingToTest');
$('.result').addClass(function(){
return classes.filter(function(clazz){
return $thingToTest.hasClass(clazz);
})[0];
});
.result { display: none; }
.result.staff { display: inherit; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="thingToTest staff global-tasks"></div>
<span class="result">Result</span>
Upvotes: 0
Reputation: 4526
Another solution is to use an attribute for that element, for example, data-body-class
.
$('body').addClass($(this).data('body-class'));
Upvotes: 0
Reputation: 19315
var classes = [
"home",
"tasks",
"roadmap",
"staff",
"timesheet",
"global-tasks",
"deleted-tasks"
];
classes.forEach(function(className) {
if ($(this).hasClass(className)) {
$("body").addClass(className);
}
});
Upvotes: 2