2012-02-29 88 views
2

可能重複:
jQuery attribute selector for multiple valuesjQuery/JavaScript選擇器或||

我有這個

$('input:radio[name=foo]').change(function() { 
    blah(); 
}); 

$('input:radio[name=bar]').change(function() { 
    blah(); 
}); 

我可以做這樣的事情?

$('input:radio[name=foo||bar]').change(function() { 
    blah(); 
}); 

如果我有另一個?

$('input:radio[name=foo||bar||foobar]').change(function() { 
    blah(); 
}); 

,因爲這是一個自定義的框架(不是我的),其 產生一個覆蓋我的課的HTML我不能使用類,它是理想的。也沒有ID選擇器 只是名稱屬性。我認爲我被困在做單獨的功能,但想提出一個問題,看看是否有人能夠在這個盒子外面思考。

注意:這個項目使用jQuery 1.3.2,我現在還不能升級。在你說什麼之前,是的,我與你在升級...

回答

12

沒有「或」字,但你可以使用多個選擇 - 你只是把它們分開通過逗號:

$('input:radio[name=foo], input:radio[name=bar]').change(function() { 
    blah(); 
}); 

或更好的是,使用類選擇器,因爲這正是他們的設計目的。

+1

的玩的jsfiddle我不知道你能逗號分隔符,謝謝!學到了新的東西 – 2012-02-29 15:31:18

+0

+1不知道你能做到這一點。好答案。 – 2012-02-29 15:33:37

1

jQuery的$()功能使用CSS選擇器(幾乎所有CSS3加上幾個its own)。它們的語法與JavaScript的邏輯運算符沒有任何關係。

無論CSS3也不jQuery的提供了一個「匹配任何這些」,讓你用一個selector group代替:

$('input:radio[name=foo], input:radio[name=bar], input:radio[name=foobar]').change(function() { 
    blah(); 
}); 
2

不幸的是,在[attr]選擇器中不存在or的簡單選擇器。您可以使用comma (,)分離您的選擇:

$('input:radio[name=foo], input:radio[name=bar]').change(...); 

或者,如果您的選擇恰好是更長的時間,你可以使用$.fn.filter

$('#foo #bar #baz .fizz .buzz input:radio').filter('[name=foo], [name=bar]').change(...); 

我建議審查jQuery selectors整個列表。

1

你提出的解決方案確實jQuery的較新版本的工作。儘管...可以將過濾器鏈接到您的查詢上

$('input:radio').filter("[name=foo],[name=bar]").change(function() { 
    blah(); 
}); 

查看,並與這裏 http://jsfiddle.net/NAgv5/1/