2010-10-01 7 views
1

Voici mon actuelle if/else:Besoin d'aide refactorisation ce Javascript instruction if/else

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'); 
} 

est-il un moyen plus court pour écrire tout cela? Juste semble ... en surpoids. :)

Répondre

7

Utilisez

.toggleClass()

Voici un exemple http://api.jquery.com/toggleClass/

+0

il a 2 classes tho – Dan

+0

Il semble que '.toggleClass()' travaille avec deux classes. c'est-à-dire '.toggleClass '(' closed closed ')'. Exemple: http://jsfiddle.net/xaHTn/4/ –

2

OMI, est la plus propre et la plus claire solution encore:

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

le plus propre serait d'utiliser seulement 1 classe (ouverte par défaut?) Alors seulement fermer la classe. Ensuite, utilisez la bascule comme cps7 suggéré. – Dan

+1

hasClass() est un changement important. Le simple fait de faire une comparaison de chaînes de l'attribut class va se casser si l'élément a d'autres classes ajoutées. –

+1

J'attribuerais une variable locale à $ (this) .closest ("article") pour éviter de faire deux fois la recherche DOM. Ce n'est pas une chose de style, c'est une chose de vitesse. – telent

0

peut-être quelque chose comme:

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'); 
+0

plus court mais pourrait être un peu plus difficile à lire non? – Dan

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

Vous pouvez obtenir un problème d'état si l'élément contient à la fois ouvert et fermé. – Dan