2011-06-30 4 views
1

Quel serait mieux préciser ce qui suit:Optimiser le code jQuery

var active = '-active'; 
if ($j('body').hasClass('faqs')) { $j('.faqs-support').toggleClass('faqs-support' + active); } 
if ($j('body').hasClass('cameras')) { $j('.camera-support').toggleClass('camera-support' + active); } 
if ($j('body').hasClass('manuals')) { $j('.manuals-support').toggleClass('manuals-support' + active); } 
if ($j('body').hasClass('downloads')) { $j('.downloads-support').toggleClass('downloads-support' + active); } 
+1

s'il vous plaît marquer comme le code afin qu'il puisse être lisible –

Répondre

2

Que diriez-vous:

$j.each(['faqs', 'cameras', 'manuals', 'downloads'], function(i, e){ 
    if ($j('body').hasClass(e)) { 
    $j('.'+e+'-support').toggleClass(e+'-support-active'); 
    } 
}); 
+0

mais celui-ci a l'air mieux. bon travail monsieur – corroded

+0

Vous devriez mettre en cache '$ j ('body')' pour qu'il n'ait pas besoin de trouver des éléments par nom de tag plusieurs fois, seulement pour obtenir le même résultat et jeter des choses. – Ryan

+0

@minitech: Oui, c'est une amélioration possible, selon que vous voulez de la simplicité ou de l'efficacité. En ce moment, il le fait de la même manière que le code original. – Guffa

2
var $body = $j('body'); 
var arr = ['faqs', 'cameras', 'manuals', 'downloads']; 
$j.each(arr, function(index, item) { 
    if($body.hasClass(item)) $j('.' + item + '-support').toggleClass(item + '-support-active'); 
}); 

est de savoir comment j'écrire cela. Pas beaucoup plus court ou beaucoup plus efficace, mais plus clair.

+0

exactement ce que j'étais sur le point écrire – corroded

+0

Je ne pense pas que '$' est défini, car le code utilise '$ j' ... – Guffa

+0

@Guffa: Merci, corrigé! – Ryan

2

Si tel est le que classe sur le corps, il suffit de prendre la pleine className, et l'utiliser pour la sélection DOM et .toggleClass():

var body_class = document.body.className + '-support'; 
$j('.' + body_class).toggleClass(body_class + '-active'); 

Juste un changement que vous auriez à faire serait de changer '.camera-support' à '.cameras-support'. (Ajout du « s ».)

+1

battu moi :) – Andy

1

si le corps ne peut avoir une de ces classes, vous pourriez faire:

var cls = $j('body').attr('class'); 
if(cls) 
    $j('.'+cls+'-support').toggleClass(cls+'-support-active'); 
+0

+1 On dirait que nous étions sur le même chemin. : o) Je voudrais simplement changer 'cls + '- support' + active' en' cls + '- support-active'' – user113716

+0

juste, merci. – Andy