如何按顺序选择具有多个类的元素

时间:2016-11-12 19:43:25

标签: javascript jquery jquery-selectors

我想选择所有具有两个类的元素,a和b,按顺序

mMediaRouter.getRoutes()

当我使用$(“。a + .b”)时,我得到两个类的元素。我只需要那些class =“a b”和 not class =“b a”的元素。当我使用javascript的getElementsByClassName时,我遇到了同样的问题。

注意:我必须指定顺序的原因是我的文档中的一些div具有class =“a b”而一些具有“b a”。 。 。我只想选择带有“a b”的那些。该文件没有优雅的结构,但这不在我的掌控之中。

5 个答案:

答案 0 :(得分:1)

如果这些元素没有其他类,您可以按属性

选择它们
$('[class="a b"]')

还有属性-start-with和-ends-with选择器,以及属性包含选择器,即使它们确实有更多类,也会拾取元素

$('[class*="a b"]')

注意:这也会匹配...class="what a bad idea"

Plain JS支持querySelector[All]

中的属性选择器

但这不是一个坏主意,不应该关注课程的顺序,如果确实如此,那你就做错了。

答案 1 :(得分:0)

理想情况下,属性列表不应优先于一个值而不是另一个值;换句话说,订单应该是不重要的,所以你可能在这里有一个可疑的模型。

但是,要回答你的问题,你需要像正则表达式那样的东西。

$('*').filter(function() { return /\ba\b.*\bb\b/.test(this.className); });

[编辑]

如果a和b之间有其他类别的机会,那就更宽容了。正如Adaneo的回答所显示的那样,如果你确定那里只有那两个,你就可以使用属性选择器,正如他所展示的那样。

答案 2 :(得分:0)

如果还涉及其他课程,您可以使用filter()

$(".a.b").filter(function(){
   return this.className.indexOf('a b')>-1;
})

答案 3 :(得分:0)

在这里你可以看到一个JSFiddle:https://jsfiddle.net/d002g7n8/1/

let NavVccVar = UIApplication.sharedApplication().keyWindow?.rootViewController as! UINavigationController
NavVccVar.visibleViewController!.presentViewController(NamVccVar, animated: true, completion: nil)

我们首先选择元素然后过滤那些有类' a'首先,班级' b'排在第二位。

答案 4 :(得分:0)

选择器$(" .a + .b")用于此类DOM中具有类b的第二个元素:

<element class="a">
<element class="b">

或者这个:

<element class="a b">
<element class="a b">

关于选择器+http://www.w3schools.com/cssreF/sel_element_pluss.asp

对于您的问题,您可以将此选择器与过滤器一起使用:

$('.a.b').filter(function () {
    return $(this).attr('class') == 'a b';
})