2012-08-22 58 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);