elem.parents('.classA or .classB')
的操作。 jQuery是否提供这种功能?#1 楼
使用逗号。'.classA, .classB'
您可以选择省略空格。
#2 楼
如果您有多个需要连接的jQuery对象,使用逗号可能是不够的。.add()方法将所选元素添加到结果集中:
// classA OR classB
jQuery('.classA').add('.classB');
比
'.classA, .classB'
更冗长,但可以让您构建更复杂的选择器,如下所示:// (classA which has <p> descendant) OR (<div> ancestors of classB)
jQuery('.classA').has('p').add(jQuery('.classB').parents('div'));
#3 楼
我为此功能编写了一个非常简单的(5行代码)插件:http://byrichardpowell.github.com/jquery-or/
它允许您可以有效地说“获取此元素,或者如果该元素不存在,请使用此元素”。例如:
$( '#doesntExist' ).or( '#exists' );
虽然接受的答案提供了与此相似的功能,但是如果两个选择器(逗号前后)都存在,则两个选择器都将返回。 />
我希望它对可能通过google进入此页面的人有帮助。
评论
这不是布尔值OR运算符的工作方式。如果两个选择器都返回元素,则OR运算符应返回所有元素,而不仅是第一个选择器的元素。您的插件应命名为“ ifEmpty”或“ else”或类似名称。
–阿尔卑斯山
13年3月12日在16:16
@Alp:考虑“ a” ||的行为“ b”与null ||香草JS中的“ b”。如果在此处应用相同的行为,则$(a).or(b)如果存在则应返回$(a),否则应返回$(b)。我认为此命名法没有任何问题,因为“或”与JS“ ||”的行为相匹配(或)运算符。
– FtDRbwLXw6
13-10-18在14:35
我也将其视为或。其他人在谈论的更像是concat或merge动作。
–LéonPelletier
2015年11月9日在17:55
就我个人而言,我不会称其为“或”,因为它可能导致混乱(即使从技术上讲它可能是正确的,因为它是一种特殊的if / or)。这实际上是空合并,称为不同事物,并且使用不同的语言具有不同的运算符:en.wikipedia.org/wiki/Null_coalescing_operator
– JanErikGunnar
17年4月4日在10:15
术语“异或”(专有或)是准确的术语,但是人们经常在寻找异或时寻找异或,因为异或通常是特定的“异”类型。
– liljoshu
19年1月23日在17:20
#4 楼
如果您要使用element = element1 ||的标准构造element2,其中JavaScript将返回真实的第一个元素,您可以完全这样做:但是更好的方法可能是以这种方式使用jQuery选择器逗号构造(它返回找到的元素的数组):我经常使用它来查找列表中的活动元素,或者在没有活动元素的情况下查找默认元素。例如:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
将返回任何具有活动类的li,或者,如果没有,将返回最后一个li。
都可以。但是,由于||可能会导致性能下降。一旦发现真相,它将立即停止处理,而数组方法将尝试找到所有元素,即使它已经找到了一个。然后再次使用||如果构造在找到要返回的选择器之前必须经过多个选择器,则可能会出现性能问题,因为它必须为每个选择器调用主jQuery对象(我真的不知道这是否会影响性能,似乎合乎逻辑)。总的来说,虽然,我使用数组方式时,选择是一个相当长的字符串。
评论
我认为find('。somethingToBeFound,.somethingElseToBeFound')与||不同构造。因为查找.somethingElseToBeFound是否在.somethingToBeFound之前位于DOM中,所以即使.somethingToBeFound存在,也会返回它。
–remo
20-04-29在11:57
#5 楼
最后,我发现了hack的操作方法:#6 楼
Daniel A. White Solution非常适合于类。我不得不找到诸如done_1_card之类的输入字段,其中1是索引。一直
$("input[name^='donee']" && "input[name*='card']")
尽管我不确定它的最优性。
评论
应该注意的是,这并不是一个“或”选择器,更像是一个中的多个选择器。
– alex
2010-2-15在3:57
@alex:但不会两次选择同一元素(串联运算符会选择两次)。它实际上是一个OR选择器,因为它创建了两个或更多集合的UNION(而AND是一个交集)。
–cletus
2010-2-15在3:59
谢谢,那行得通。由于调试方面的疏忽,我认为使用逗号表示“ AND”。
– Suan
2010-2-15在4:00
AND为.classA.classB。
–丹尼尔·怀特(Daniel A. White)
2010-2-15在4:28
实际上,这取决于原始问题所暗示的含义...即:经典而言,“或”运算符会短路。因此,用jquery来说,“或”运算符也可能会短路。
–马修
2012年4月22日在1:58