在Javascript中重复功能

时间:2013-04-30 09:37:00

标签: javascript jquery dry callouts

我正在寻找一些新手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');
});

2 个答案:

答案 0 :(得分: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');
});

答案 1 :(得分: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');
    });

});

可能有更简洁的方法来执行此操作,具体取决于您的标记的外观(以及您是否有任何控制权来更改它)。