Sua*_*uan 316 jquery jquery-selectors
我想知道是否有一种方法可以在jQuery选择器中使用"OR"逻辑.例如,我知道元素是具有类classA或classB的元素的后代,我想做类似的事情elem.parents('.classA or .classB')
.jQuery是否提供此类功能?
Dan*_*ite 483
使用逗号.
'.classA, .classB'
Run Code Online (Sandbox Code Playgroud)
您可以选择省略空格.
Alp*_*Alp 69
如果您有多个需要连接的jQuery对象,则使用逗号可能还不够.
的.新增()方法将所选择的元素到结果集:
// classA OR classB
jQuery('.classA').add('.classB');
Run Code Online (Sandbox Code Playgroud)
它比它更冗长'.classA, .classB'
,但是让你构建更复杂的选择器,如下所示:
// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));
Run Code Online (Sandbox Code Playgroud)
By *_*ell 22
我已经为这个功能编写了一个非常简单的(5行代码)插件:
http://byrichardpowell.github.com/jquery-or/
它允许您有效地说"获取此元素,或者如果该元素不存在,则使用此元素".例如:
$( '#doesntExist' ).or( '#exists' );
Run Code Online (Sandbox Code Playgroud)
虽然接受的答案提供了与此类似的功能,但如果两个选择器(逗号之前和之后)都存在,则将返回两个选择器.
我希望它对任何可能通过谷歌登陆此页面的人都有帮助.
Ken*_*son 16
如果你想使用element = element1 ||的标准结构 element2,其中JavaScript将返回第一个真正的,你可以做到这一点:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
Run Code Online (Sandbox Code Playgroud)
这将返回实际找到的第一个元素.但更好的方法可能是以这种方式使用jQuery选择器逗号构造(它返回找到的元素的数组):
element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];
Run Code Online (Sandbox Code Playgroud)
这将返回第一个找到的元素.
我不时地使用它来查找列表中的活动元素或者如果没有活动元素则查找默认元素.例如:
element = $('ul#someList').find('li.active, li:first')[0]
Run Code Online (Sandbox Code Playgroud)
将返回任何具有活动类别的li,或者如果没有,将返回最后一个li.
要么工作.但是,作为||,可能存在性能损失 一旦发现一些真实的东西就会停止处理,而阵列方法将尝试找到所有元素,即使它已经找到了.然后再使用|| 如果在找到它将返回的那个之前必须通过几个选择器,那么构造可能会出现性能问题,因为它必须为每个选择器调用主jQuery对象(我真的不知道这是否是性能命中,这似乎是合乎逻辑的,它可能是).但是,一般情况下,当选择器是一个相当长的字符串时,我使用数组方法.