2011-09-02 2 views
0

Je basculer suis en utilisant jQuery 1.6 et je voudrais améliorer le code suivant (qui est, écrire moins de faire plus):Améliorer la classe

if (row.hasClass('line_odd')) { 
    row.removeClass('line_odd'); 
    row.addClass('line_even'); 
} else { 
    row.removeClass('line_even'); 
    row.addClass('line_odd'); 
} 

Comment puis-je faire cela?

Répondre

1

ligne En supposant commence exactement l'une des deux classes:

row.toggleClass("line_odd line_even") 

devrait faire l'affaire.

+0

C'est la voie à suivre compte tenu de votre hypothèse. – user113716

3

Remplacer le bloc avec:

var hasOdd = row.hasClass('line_odd'); 
row.toggleClass('line_odd', !hasOdd).toggleClass('line_even', hasOdd); 
+0

Pas besoin de variable hasOdd –

+3

@Piyush: Avoir cela évitera d'appeler hasClass deux fois. – Chandu

+0

Ca a du sens ...! –

0

vous pouvez utiliser enchaînant

if (row.hasClass('line_odd')) { 
    row.removeClass('line_odd').addClass('line_even'); 

} else { 
    row.removeClass('line_even').addClass('line_odd'); 
} 
+0

Ce n'est pas la version réduite. Peut être réduit davantage avec .toggleClass –

2

je suggère l'utilisation de quelque chose comme http://api.jquery.com/toggleClass/, par exemple:

row.toggleClass("line_odd") 
    .toggleClass("line_even"); 

Cela suppose que aucun élément de ligne aurait à la fois le line_odd et line_even défini initialement, afin qu'il ait le même effet que votre code.

+0

Battez-moi! +1 – Bojangles

1

Effectuez les opérations suivantes

var isOdd = row.hasClass('line_odd'); 
row.toggleClass('line_odd', !isOdd); 
row.toggleClass('line_even', isOdd); 
+0

Pas besoin de variable isOdd –

+4

@Piyush dans un cas idéal, je serais d'accord. L'OP n'a pas précisé que le code a démarré dans l'état correct. Réfléchissez si la ligne a démarré avec 'line_odd' et 'line_even'. Dans ce cas, 'isOdd' est nécessaire. Je suis d'accord c'est un peu là-bas mais l'OP n'a pas spécifié et je voulais m'assurer que ma simplification fonctionnait aussi bien que l'échantillon original – JaredPar

+0

Makes Sense +1. –

0
row.toggleClass('line_odd', row.hasClass('line_odd')).toggleClass('line_even', 
row.hasClass('line_odd')); 

Ceci est la version réduite qui utilise .toggleClass alongwith le deuxième argument selon lequel, si vrai, ajoute la classe et si elle est fausse supprime la classe.

+3

Cela ne va-t-il pas ajouter les classes seulement quand elles sont déjà définies? 'toggleClass' sans le second argument a déjà le bon comportement. – coyotebush

+0

Il y avait une faute de frappe dans le code que j'ai corrigé. À propos de votre deuxième déclaration concernant ne pas avoir besoin du deuxième argument - n'est pas la syntaxe comme $ (sélecteur) .toggleClass (classe, commutateur) –

+1

C'est une syntaxe possible, oui. Sans le second argument, il supprime la classe si elle est présente et l'ajoute sinon. Vous devrez également modifier la première partie de votre code, pour ajouter 'line_odd' uniquement si ** 'line_even' ** est présent. – coyotebush

Questions connexes