2011-06-30 87 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

但這個看起來更好。好工作先生 – 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'); 

剛您需要進行的一項更改是將'.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 +' - 支持'+ active'改爲'cls +' - support-active'' – user113716

+0

沒錯,謝謝。 – Andy