将DRY应用于一组类似的功能

时间:2016-10-30 19:15:16

标签: javascript jquery dry

应用DRY是我最大的努力。任何人都可以帮我创建一个功能,实现与这4个函数相同的功能,以及如何为每个.symbol调用它吗?

$(".symbol:nth-child(1)").click(function(){
  $("body").removeClass();
  $("body").addClass("gradient1");
})


$(".symbol:nth-child(2)").click(function(){
  $("body").removeClass();
  $("body").addClass("gradient2");
})


$(".symbol:nth-child(3)").click(function(){
  $("body").removeClass();
  $("body").addClass("gradient3");
})


$(".symbol:nth-child(4)").click(function(){
  $("body").removeClass();
  $("body").addClass("gradient4");
})

2 个答案:

答案 0 :(得分:1)

您可以创建一个获取索引并指定单击处理程序的函数:

function applyNthClick( n ) {
   $(".symbol:nth-child(" + n + ")").click(function(){
     $("body").removeClass();
     $("body").addClass("gradient" + n);
   })
}

然后像这样使用它:

applyNthClick(1);
applyNthClick(2);
applyNthClick(3);
applyNthClick(4);

或者,如果你知道所有n,你可以创建一个数组,然后将函数映射到它上面:

[1,2,3,4].forEach( applyNthClick );

答案 1 :(得分:1)

可以使用整个符号集合中每个元素的索引

var $symbols = $(".symbol").click(function(){
     var symbolIndex = $symbols.index(this);
     $("body").removeClass().addClass("gradient" + (symbolIndex +1) );
 });

参考:index()