2012-02-29 67 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/