2016-08-30 82 views
0

是否有一些方法可以爲使用父>子選擇器的多個ID編寫jQuery選擇器?是否有更有效的方法來組合多個id選擇器,每個id選擇器都在jQuery中有一個子選擇器?

我知道我能做到這一點...

$('#checkbox1').click(function() { 
    // do stuff 
}); 

...或...這

$('#div1 > input[type=checkbox]').click(function() { 
    // do stuff 
}); 

...或...這

$('#checkbox1, #checkbox2, #checkbox3').click(function() { 
    // do stuff 
}); 

...但是當我將兩者結合時,它會變得冗長。是否有更有效的/緊湊的方式?...

$('#div1 > input[type=checkbox], #div2 > input[type=checkbox], #div3 > input[type=checkbox]').click(function() { 
    // do stuff 
}); 
+3

給你的輸入一個普通的類? – j08691

+0

@ j08691這是顯而易見的解決方案。如果可以的話,我會盡我所能,但我正在Drupal內容管理系統中的一個頁面上工作,他們的樣式被鎖定。當我保存時,我添加到我的代碼中的任何自定義類都會被刪除。只有ID是允許的。 – krick

回答

1

使用.children()

$("#div1, #div2, #div3").children("input[type=checkbox]").click(function() { 
    // do stuff 
}); 
+0

我只想要div的直接子節點的輸入。查找將繼續鑽取多個級別。雖然.children()可能會起作用。 – krick

+0

是的,這將起作用。 – Barmar

1

因爲jQuery的其實只是JavaScript和你的選擇僅僅是字符串,你實際上可以將它們保存到變量將它們連接在一起。你可以進一步將它們存儲到一個數組中。例如...

var section = [ 
    '#checkbox1', 
    '#div1 > input[type=checkbox]', 
    '#checkbox1, #checkbox2, #checkbox3' 
]; 

$(section[0] + ", " + section[1] + ", " + section[2]).click(function() { 
    // do stuff 
}); 

根據你的代碼,你可以大大減少選擇器的大小。你甚至可以做一些很酷的數組函數,使它成爲更有效的分組方法。

+1

這是一個有趣的想法。我從未考慮過創建一個選擇器字符串數組。我將把它歸檔以備將來使用。謝謝。 – krick