jQuery或选择器?

2020/10/31 14:02 · jquery ·  · 0评论

我想知道是否有一种方法可以在jQuery选择器中使用“或”逻辑。例如,我知道一个元素是类classA或classB的元素的后代,并且我想执行类似的操作elem.parents('.classA or .classB')jQuery是否提供此类功能?

使用逗号。

'.classA, .classB'

您可以选择省略空格。

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

。新增()方法将所选择的元素到结果集:

// 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' );

虽然接受的答案提供了与此类似的功能,但是如果两个选择器(逗号前后)都存在,则将返回两个选择器。

希望对所有可能通过Google进入此页面的人有帮助。

如果您要使用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,或者如果没有,则将仅返回最后一个li。

Either will work. There are potential performance penalties, though, as the || will stop processing as soon as it finds something truthy whereas the array approach will try to find all elements even if it has found one already. Then again, using the || construct could potentially have performance issues if it has to go through several selectors before finding the one it will return, because it has to call the main jQuery object for each one (I really don't know if this is a performance hit or not, it just seems logical that it could be). In general, though, I use the array approach when the selector is a rather long string.

Finally I've found hack how to do it:

div:not(:not(.classA,.classB)) > span

(selects div with class classA OR classB with direct child span)

Daniel A. White Solution works great for classes.

I've got a situation where I had to find input fields like donee_1_card where 1 is an index.

My solution has been

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

Though I am not sure how optimal it is.

本文地址:http://jquery.askforanswer.com/jqueryhuoxuanzeqi.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!