2011-03-27 24 views
0

我發現了JQuery,並經過大量研究後找不到我的問題的答案,因爲我不知道如何表達它。jquery根據他們的ID號選擇divs

我在我的頁面上有2個標尺+ 2個指南,還有2個按鈕來顯示或隱藏它們。 我寫了一些有用的東西,但我想通過縮短代碼來優化代碼。

這就是:

$('#ruler-bg1, #ruler-bg2').hide(); 

$('#ruler1').click(function() { 
    $('#ruler-bg1').slideToggle(100); 
    $('#guide1').toggleClass('guide-on'); 
}); 

$('#ruler2').click(function() { 
    $('#ruler-bg2').slideToggle(100); 
    $('#guide2').toggleClass('guide-on'); 
}); 

我想不通的是如何組2層的功能等#ruler+number點擊顯示#ruler-bg+same_number#guide+same_number

回答

2

像這樣的東西應該做的:

$('#ruler1, #ruler2').click(function(){ 
    var num = this.id.substr(6); 

    $('#ruler-bg' + num).slideToggle(100); 
    $('#guide' + num).toggleClass('guide-on'); 
}); 

它可能會更好,如果有元素之間的一些結構關係點擊和內容採取行動......

+0

嗯,能在這種情況下,雖然對於較大的指數值將不能很好地擴展,而慢一點,也許正則表達式是更容易維護/擴展。 – davin 2011-03-27 10:08:21

+0

@達文你是什麼意思,「更大的指數值」?如果有更多的'標尺#'元素,最好給它們一個類以及一個id並使用一個類選擇器。 – lonesomeday 2011-03-27 10:10:03

+0

如果索引大於10,那麼'substr'會認爲11和1是等價的:''#ruler11「.substr(-1)===」#ruler1「.substr(-1)'雖然你可以' substr'使用''#ruler''長度的字符串開始,這不像正則表達式那樣具有可擴展性 – davin 2011-03-27 10:12:19

0
initRuler(1); 
initRuler(2); 

function initRuler(id) { 
    $('#ruler' + id).click(function() { 
    $('#ruler-bg' + id).slideToggle(100); 
    $('#guide' + id).toggleClass('guide-on'); 
    }); 
} 
1

我想補充對所有的「統治者」都是一個「統治者」,並在統治者和指導者身上使用這些身份證作爲標識符。

$('.ruler').click(function(){ 
    $('#bg-'+this.id).slideToggle(100); 
    $('#guide-'+this.id).toggleClass('guide-on'); 
});