我想选择所有具有两个类的元素,a和b,按顺序。
mMediaRouter.getRoutes()
当我使用$(“。a + .b”)时,我得到两个类的元素。我只需要那些class =“a b”和 not class =“b a”的元素。当我使用javascript的getElementsByClassName时,我遇到了同样的问题。
注意:我必须指定顺序的原因是我的文档中的一些div具有class =“a b”而一些具有“b a”。 。 。我只想选择带有“a b”的那些。该文件没有优雅的结构,但这不在我的掌控之中。
答案 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';
})