Shpigford
Shpigford

Reputation: 25378

Need help refactoring this Javascript if/else statement

Here's my current if/else statement:

var current_class = $(this).closest("article").attr("class")

if (current_class == 'opened')
{
  $(this).closest("article").removeClass('opened');
  $(this).closest("article").addClass('closed');
}
else
{
  $(this).closest("article").removeClass('closed');
  $(this).closest("article").addClass('opened');
}

Is there a shorter way to write all of that? Just seems...overweight. :)

Upvotes: 1

Views: 335

Answers (4)

Dan
Dan

Reputation: 3756

IMO this is the cleanest and still clearest solution:

var current_class = $(this).closest("article");
if (current_class.hasClass('opened'))
{
  current_class.removeClass('opened').addClass('closed');
}
else
{
  current_class.removeClass('closed').addClass('opened');
}

Upvotes: 2

pwb44
pwb44

Reputation: 1

$(this).closest("article").toggleClass('opened').toggleClass('closed');

Upvotes: 0

mx0
mx0

Reputation: 7143

Use

.toggleClass()

Here is an example http://api.jquery.com/toggleClass/

Upvotes: 6

user462356
user462356

Reputation:

maybe something like:

var current = $(this).closest('article'); // no need to run the selector over and over
var current_class = current.attr('class');
current.removeClass('opened closed').addClass(current_class=='opened'?'closed':'opened');

Upvotes: 0

Related Questions