2013-04-30 113 views
1

我在找一些新手Javascript的幫助。使用Javascript重複功能

我有一系列簡單的函數,使用JQuery添加和刪除一些滑塊內容,然後單擊標註。如何重寫這些內容以適應任何類別('cat1'等)的內容?

$('.cat1_link').click(function(event) { 
    $('.category_slides li').fadeOut(); 
    $('.cat1').fadeIn(); 
    $('article.listitem').removeClass('current'); 
    $('article.listitem.cat1').addClass('current'); 
}); 
$('.cat2_link').click(function(event) { 
    $('.category_slides li').fadeOut(); 
    $('.cat2').fadeIn(); 
    $('article.listitem').removeClass('current'); 
    $('article.listitem.cat2').addClass('current'); 
}); 
+0

很有可能,這可以被重構。你可以編輯問題並添加相關的'HTML'嗎?您的頁面結構將有助於選擇適用於所有類別的泛型選擇器,可能避免在選擇器中使用字符串連接。 – andyb 2013-04-30 09:42:20

回答

2

提取變化的「東西」,並創建一個通用函數,以保持相同的「東西」。第一個刺會是這樣的

$.each(['cat1', 'cat2'], function (i, e) { 

    $('.' + e + '_link').click(function(event) { 
     $('.category_slides li').fadeOut(); 
     $('.' + e).fadeIn(); 
     $('article.listitem').removeClass('current'); 
     $('article.listitem.' + e).addClass('current'); 
    }); 

}); 

可能有更簡潔的方式來做到這一點,取決於您的標記是什麼樣子(以及你是否有任何控制,以改變它)。

4

你的HTML改爲:

<a class="cat_link" data-category="cat1" ...> 

然後,你可以寫的jQuery爲:

$('cat_link').click(function(event) { 
    var cat_class = $(this).data('category'); 
    $('.category_slides li').fadeOut(); 
    $('.'+cat_class).fadeIn(); 
    $('article.listitem').removeClass('current'); 
    $('article.listitem.'+cat_class).addClass('current'); 
}); 
+0

謝謝所有人 - 我遵循了Barmar的例子,並在整個網站上完美地完成了這項工作。 – 2013-05-05 18:26:01