我想知道是否有一种方法在jQuery选择器中具有“或”逻辑。例如,我知道一个元素是类classA或classB的元素的后代,我想要做类似elem.parents('.classA or .classB')
的事情。 jQuery是否提供这样的功能?jQuery OR Selector?
回答
使用逗号。
'.classA, .classB'
您可以选择省略该空间。
如果您有多个需要连接的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'));
我已经写一个令人难以置信的简单(5行代码)插件完全适用于此功能:
http://byrichardpowell.github.com/jquery-or/
它允许您有效地说“获取此元素,或者如果该元素不存在,则使用此元素”。例如:
$('#doesntExist').or('#exists');
虽然接受的答案提供了类似的功能这一点,如果两个选择(&前的逗号后)存在,无论是选择将被退回。
我希望这对任何可能通过谷歌登录此页面的人都有帮助。
这不是布尔OR运算符的工作方式。如果两个选择器都返回元素,则OR运算符应该返回所有这些元素,而不仅仅返回第一个选择器的元素。你的插件应该被命名为“ifEmpty”或“其他”或类似的东西。 – Alp 2013-03-12 16:16:39
@Alp:考虑'“a”||的行为“b”与“null ||” “香草JS”中的“b”。如果我们在这里应用相同的行为,$(a)。或(b)'应该返回'$(a)',如果它存在,否则它应该返回'$(b)'。我不认为这个命名法有什么问题,因为“或”符合JS“||”的行为, (或)运营商。 – FtDRbwLXw6 2013-10-18 14:35:56
我也把它看成是一个'或'。其他人谈论的更像是一个'concat'或'merge'动作。 – 2015-11-09 17:55:43
如果您要使用element = element1 ||的标准构造, element2其中JavaScript将返回第一个真实的,你可以做到这一点:
element = $('#someParentElement .somethingToBeFound') || $('#someParentElement .somethingElseToBeFound');
这将返回第一个实际发现的元素。但更好的方法很可能是使用jQuery选择逗号构造(返回找到的元素的数组)以这种方式:
element = $('#someParentElement').find('.somethingToBeFound, .somethingElseToBeFound')[0];
将返回找到的第一个元素。
我经常使用它来查找列表中的活动元素,或者在没有活动元素的情况下找到某个默认元素。例如:
element = $('ul#someList').find('li.active, li:first')[0]
这将返回任何li与活动的类或应该没有,只会返回最后一个李。
两者都可以工作。尽管如此,有潜在的性能损失只要找到真正的东西就会停止处理,而数组方法将尝试找到所有元素,即使它已经找到了一个元素。然后再次使用||构造可能会遇到性能问题,如果它必须经过几个选择器才能找到它会返回的,因为它必须调用每个主jQuery对象(我真的不知道这是否是性能打击,它可能是合乎逻辑的)。但是,一般来说,当选择器是一个相当长的字符串时,我使用数组方法。
Daniel A. White Solution非常适合上课。
我有一种情况,我必须找到输入字段,如donee_1_card其中1是一个索引。
我的解决方案已经
$("input[name^='donee']" && "input[name*='card']")
虽然我不知道它是如何最佳。
- 1. jQuery Selector
- 2. Jquery Selector
- 3. jQuery OR Selector?
- 4. jQuery Selector预计
- 5. jQuery Selector - Tabindex = -1
- 6. jquery prev - with selector
- 7. jQuery Select/Dropdown Selector
- 8. jQuery Selector问题?
- 9. jquery selector before-last
- 10. Jquery> Selector
- 11. jQuery Week Selector
- 12. JQuery Selector Table Cells
- 13. jquery selector help
- 14. jQuery Selector ASP.NET GridView列
- 15. jquery :: submit selector not working?
- 16. jquery selector not working with []
- 17. jQuery中的parentOrSelf([selector])
- 18. jQuery Selector不工作
- 19. jQuery和Prototype Selector Madness
- 20. “.selector”
- 21. 快速JQUERY SELECTOR点击
- 22. 在jQuery Selector中连接
- 23. prevAll的jQuery Selector问题
- 24. jquery selector not working in Gmail
- 25. jQuery中的selector ^如何?
- 26. jQuery Selector + SVG不兼容?
- 27. 这个jQuery Selector的问题
- 28. Jquery Selector多个类(这个)
- 29. jQuery Selector(children,eq和innerhtml)
- 30. jQuery:$('。selector',myContext)和myContext.find('。selector')之间是否有功能差异?
应该指出,这不是一个真正的'或'选择器,更像是一个多选择器。 – alex 2010-02-15 03:57:03
@alex:但它不会选择相同的元素两次(这是一个串联运算符)。它确实是一个OR选择器,因为它创建了两个或更多集合的UNION(而AND是一个交集)。 – cletus 2010-02-15 03:59:36
谢谢,这是有效的。由于调试疏忽,我认为使用逗号意味着'AND'。 – Suan 2010-02-15 04:00:18