2011-06-30 16 views
1

最適化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

を、それは私がちょうど約だった正確に何 –

答えて

2

方法について:それは身体上ののみクラスなら

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

しかしこれはよりよく見えます。 good job sir – corroded

+0

'$ j( 'body')'をキャッシュして、同じ結果を得て物を投げ捨てるだけで、タグ名で要素を見つけ出す必要はありません。 – Ryan

+0

@minitech:はい、これは、単純さと効率性のどちらを望むかによって、さらに改善される可能性があります。今のところ、元のコードと同じように機能します。 – 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'); 
}); 

は、私はそれを書くだろうかについてです。それほど短くないか、はるかに効率的ですが、はっきりしています。

+0

読めるかもしれないので、コードとしてそれをマークしてください – corroded

+0

を書いてください。 '$'が定義されているとは思いません。コードが '$ j'を使用するので... – Guffa

+0

@Guffa:ありがとう、固定! – Ryan

2

、ちょうど完全なクラス名をつかむと、DOMの選択と.toggleClass()のためにそれを使用します。

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

だけ1つの変更は'.camera-support''.cameras-support'に変更することです。体だけでこれらのクラスのいずれかを持つことができる場合(「s」を追加)

+1

私にそれを打つ:) – Andy

1

することはあなたが行うことができます:

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

+1私たちは同じトラックにあったように見えます。 :o)私はちょうど 'cls + 'を' cls +'に '+ active'を '' cls + ' - support-activeに変更したいと思っています。 – user113716

+0

、ありがとう。 – Andy