如何在jQuery中选择具有多个类的元素?

Mla*_*den 1985 jquery jquery-selectors

我要选择所有具有两个类的元素ab.

<element class="a b">
Run Code Online (Sandbox Code Playgroud)

所以,只有具有两个类的元素.

当我使用$(".a, .b")它给我联盟,但我想要交集.

Sas*_*gov 2543

如果你只想匹配两个类的元素(一个交集,就像逻辑AND),只需将选择器写在一起,两者之间没有空格:

$('.a.b')
Run Code Online (Sandbox Code Playgroud)

订单不相关,因此您也可以交换类:

$('.b.a')
Run Code Online (Sandbox Code Playgroud)

所以对比赛div有一个ID元素a与类bc,你可以这样写:

$('div#a.b.c')
Run Code Online (Sandbox Code Playgroud)

(实际上,你很可能不需要特定的,并且ID或类选择器本身就足够了$('#a').)

  • @Shimmy:是的.两个选择器之间的空格意味着您正在搜索后代; 即`.a .b`搜索类"b"的元素,它们是类"a"的元素的后代.所以像`div a`这样的东西只会返回*a`元素,它们是*div`元素. (28认同)
  • @Flater:这只是为了举个例子.但是如果动态添加类`b`和`c`可能会有用,而如果它有这些类,你只想选择它. (9认同)
  • 这种选择方法也适用于CSS,例如.ab {style properties},请参阅:http://css-tricks.com/multiple-class-id-selectors/ (4认同)
  • 啊哈,好点:-)到现在为止,我会使用.hasClass(),但这是一种更好的符号. (2认同)
  • @AaA:那是不对的; 自从jQuery开始以来就是这样,因为这就是CSS的工作方式.逗号选择与任一选择器匹配的元素(将其视为逻辑OR),而不是两者,因此它不是一回事(尽管我可以看到这可能会让人感到困惑). (2认同)

Jam*_*ove 168

您可以使用以下filter()功能执行此操作:

$(".a").filter(".b")
Run Code Online (Sandbox Code Playgroud)

  • @Rice:这个会慢一点,因为它会首先构建一个带有"a"类的对象列表,然后删除除"b"类之外的所有对象,而我会一步完成.但除此之外,没有区别. (46认同)
  • 这个答案和被接受的答案有什么区别? (15认同)
  • @pac:$('.foo'+变量)应该已经完成​​了这个技巧,但我可以看到这种方法在这种情况下更清晰. (6认同)
  • 如果您已经找到`.a`并且需要根据也属于原始`.a`集的不同任意类过滤多次,这也会更有效. (6认同)
  • 这对我来说很有用,我正在搜索一个定义为变量的类,这个类与第一个例子中的语法不兼容.例如:$('.foo').filter(变量).谢谢 (4认同)
  • @ user3281466:关闭,但没有.`.b .c`在类"b"的div里面找到一个类"c"**的div.你要找的是`$('.a').filter('.b,.c')`.或者,没有`filter`:`$('.ab,.a.c')` (4认同)

小智 117

对于这种情况

<element class="a">
  <element class="b c">
  </element>
</element>
Run Code Online (Sandbox Code Playgroud)

您需要把一个空间之间.a.b.c

$('.a .b.c')
Run Code Online (Sandbox Code Playgroud)


Joh*_*ers 59

你遇到的问题是,你使用的是Group Selector,而你应该使用的是Multiples selector!更具体地说,你正在使用$('.a, .b')而你应该使用$('.a.b').

有关更多信息,请参阅下面组合选择器的不同方法的概述!


组选择器:","

选择所有<h1>元素和所有<p>元素以及所有<a>元素:

$('h1, p, a')
Run Code Online (Sandbox Code Playgroud)

倍数选择器:""(无字符)

选择所有<input>元素type text,包括类codered:

$('input[type="text"].code.red')
Run Code Online (Sandbox Code Playgroud)

后代选择器:""(空格)

选择<i>元素内的所有<p>元素:

$('p i')
Run Code Online (Sandbox Code Playgroud)

子选择器:">"

选择<ul>元素的直接子元素的所有元素<li>:

$('li > ul')
Run Code Online (Sandbox Code Playgroud)

相邻的兄弟选择器:"+"

选择<a>紧跟<h2>元素后面的所有元素:

$('h2 + a')
Run Code Online (Sandbox Code Playgroud)

一般兄弟选择器:"〜"

选择所有<span>元素的兄弟<div>元素:

$('div ~ span')
Run Code Online (Sandbox Code Playgroud)


小智 36

$('.a .b , .a .c').css('border', '2px solid yellow');
//selects b and c
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="a">a
  <div class="b">b</div>
  <div class="c">c</div>
  <div class="d">d</div>
</div>
Run Code Online (Sandbox Code Playgroud)


mac*_*Jun 25

只需提及元素的另一个案例:

例如 <div id="title1" class="A B C">

只需输入: $("div#title1.A.B.C")


Sal*_*bas 25

Vanilla JavaScript解决方案: -

document.querySelectorAll('.a.b')


Tej*_*hah 18

为了获得更好的性能,您可以使

$('div.a.b')
Run Code Online (Sandbox Code Playgroud)

这将仅通过div元素查看,而不是单步执行页面上的所有html元素.


Sur*_*een 8

组选择器

body {font-size: 12px; }
body {font-family: arial, helvetica, sans-serif;}
th {font-size: 12px; font-family: arial, helvetica, sans-serif;}
td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
Run Code Online (Sandbox Code Playgroud)

变成这样:

body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,你已经尝试了组选择器,而它是一个交集

$(".a, .b") 
Run Code Online (Sandbox Code Playgroud)

而是使用这个

$(".a.b") 
Run Code Online (Sandbox Code Playgroud)


San*_*ell 5

你不需要jQuery这个

Vanilla你可以做:

document.querySelectorAll('.a.b')
Run Code Online (Sandbox Code Playgroud)


Sam*_*Sam 5

您的代码$(".a, .b")将适用于以下多个元素(同时)

<element class="a">
<element class="b">
Run Code Online (Sandbox Code Playgroud)

如果你想选择具有 a 和 b 两个类的元素,而<element class="a b">不是使用没有昏迷的 js

$('.a.b')
Run Code Online (Sandbox Code Playgroud)