jQuery或select器?

我想知道是否有一种方法在jQueryselect器中有“或”逻辑。 例如,我知道一个元素是类classA或classB的元素的后代,我想要做一些像elem.parents('.classA or .classB') 。 jQuery提供这样的function吗?

使用逗号。

 '.classA, .classB' 

您可以select省略该空间。

如果您有多个需要连接的jQuery对象,使用逗号可能不够。

.add()方法将所选元素添加到结果集中:

 // classA OR classB jQuery('.classA').add('.classB'); 

它比'.classA, .classB'更详细,但是可以让你构build更复杂的select器,如下所示:

 // (classA which has <p> descendant) OR (<div> ancestors of classB) jQuery('.classA').has('p').add(jQuery('.classB').parents('div')); 

我写了一个令人难以置信的简单(5行代码)插件正是这个function:

http://byrichardpowell.github.com/jquery-or/

它允许你有效地说“得到这个元素,或者如果这个元素不存在,使用这个元素”。 例如:

 $( '#doesntExist' ).or( '#exists' ); 

虽然接受的答案提供了类似的function,如果两个select器(逗号前后)都存在,则两个select器都将被返回。

我希望这可以帮助任何人可能通过谷歌登陆这个页面。

如果您正在寻找使用element = element1 ||的标准构造 element2将返回第一个真正的JavaScript,你可以这样做:

 element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound'); 

这将返回实际find的第一个元素。 但更好的方法可能是以这种方式使用jQueryselect器逗号构造(它返回一个发现的元素数组):

 element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0]; 

这将返回第一个find的元素。

如果没有活动元素,我会不时使用它来查找列表中的活动元素或某个默认元素。 例如:

 element = $('ul#someList').find('li.active, li:first')[0] 

这将返回一个活跃的类,如果没有,将只返回最后的李。

要么工作。 尽pipe如此,有潜在的性能损失 将尽快停止处理,一旦find真正的东西,而数组方法将尝试find所有的元素,即使它已经find了一个。 然后再次使用|| 构造可能会遇到性能问题,如果它必须通过几个select器之前find它将返回,因为它必须调用每个主要的jQuery对象(我真的不知道这是否是性能打击或不,它可能是合乎逻辑的)。 一般来说,当select器是一个相当长的string时,我使用数组方法。

Daniel A. White Solution非常适合上课。

我有一个情况,我必须find像donee_1_card这样的input字段,其中1是一个索引。

我的解决办法是

 $("input[name^='donee']" && "input[name*='card']") 

虽然我不确定它是多么的优化。