2012-08-22 57 views
0

目前,我有这个jQuery代码最小化jQuery代码

$('#f1').click(function() { 
$('#bg').addClass('f1'); 
}); 

$('#f2').click(function() { 
$('#bg').addClass('f2'); 
}); 

$('#f3').click(function() { 
$('#bg').addClass('f3'); 
}); 

的问题是什么我想做的事,我需要写了无数次,想知道如何能够缩短

回答

5

使用multiple selector或给这些元素共同类(更好,如果你有更多的元素):

$('#f1, #f2, #f3').click(function() { // $('.foo').click(...) 
    $('#bg').addClass(this.id); 
}); 
0

,我们可以这样做。

for(var i=1; i<=3;i++) 
{ 
    $('#f' + i).click(function() { 
     $('#bg').addClass('f' + i); 
    }); 
} 
1

给他们选择一个类,然后

$('.foo').click(function() { 
    $('#bg').addClass(this.id); 
}); 
0

有多种方法,这里有另外一个,如果你有很多的#fx的div:

var prefix = "f"; 

$("[id^="+prefix+"]").click(function() { 
    $('#bg').addClass(this.id); 
}); 

或者,如果所有你的元素在一个“容器”元素内:

$("#fContainer").children().click(function() { 
    $('#bg').addClass(this.id); 
}); 
+0

这将匹配所有以** f **开头的元素。此外,像这样慢的搜索方式,而不是给他们一个类名或通过使用多个ID。 – sQVe

+0

确实如此,但这又取决于OP的需求。如果你有数百个元素,不能使用类,并且id的前缀是唯一的(即不是'f'),它可以是一个解决方案。 – Mahn

1

添加一个类来所有的人,然后就去做:

$('.class').click(function() { 
     $('#bg').addClass($(this).attr('id')); 
}); 
0

假设你不想使用一个类(如其他人所说的)从您点击任务分开你的函数。

var clickHandler = function(){ 
    $('#bg').addClass(this.id); 
}; 
$('#f1, #f2, #f3').click(clickHandler);