jQueryで複数のクラスを持つ要素を選択するにはどうすればよいですか?


2062

私は2つのクラスを持つすべての要素を選択したいab

<element class="a b">

つまり、両方のクラスを持つ要素のみです。

使用する$(".a, .b")と結合が得られますが、交差点が必要です。


2
ユニオンとインターセクションが私たちにとって何を意味するかを定義できればよいのですnewbs :)
Kolob Canyon

10
@KolobCanyonユニオンとインターセクションは、基本的な集合論の概念です。したがって、たとえば、ユニオンはすべてのフランス語を話す人(男性と女性の両方を含む)ですが、交差点はフランス語を話すすべての女性です(フランス語を話さないすべての人を除外し、女性でないすべての人々を除外します)。ユニオンと交差は、各セットを定義する任意の数の特性で作成できます。en.wikipedia.org/wiki/Union_(set_theory) en.wikipedia.org/wiki/Intersection_(set_theory)
キャサリン・オズボーン

6
「女性」と「フランス語を話す人」の2つのセットの中で、ユニオンは世界のすべての女性と世界のすべてのフランス語を話す人、つまり話さない両方の女性を含むセットになるということだと思いますフランス語とフランス語を話す男性。あなたが書いたように、交差点はフランス語を話す女性だけです。
Teemu Leisti 16

回答:


2628

両方のクラス(論理ANDなどの交差)を持つ要素のみを一致させる場合は、間にスペース入れずにセレクターを一緒に記述します

$('.a.b')

順序は関係ないため、クラスを交換することもできます。

$('.b.a')

したがってdiv、IDがの要素aをクラスbおよびと一致させるにはc、次のように記述します。

$('div#a.b.c')

(実際には、ほとんどの場合、その特定を取得する必要はありません$('#a')。通常、IDまたはクラスセレクターだけで十分です。)


9
@Flater:例として挙げただけです。しかし、クラスbcが動的に追加され、要素がそれらのクラスを持っている場合にのみ要素を選択したい場合に便利です。
サーシャチェディゴフ2012

3
ああ、良い点:-)これまでは.hasClass()を使用していましたが、これはより良い表記法です。
12

4
この選択方法は、CSSでも機能します。例:.ab {スタイルプロパティ}参照:css-tricks.com/multiple-class-id-selectors
Chris Halcrow

30
@シミー:はい。2つのセレクターの間のスペースは、子孫を検索していることを意味します。つまり.a .b、class bを持つ要素の子孫であるclass を持つ要素を検索しますa。のようなものは、要素内にある要素div aのみを返しaます。div
サーシャチェディゴフ2013年

2
@AaA:不正解です。jQueryの最初からこのようになっていたのは、CSSが機能するためです。コンマは、両方ではなくどちらかのセレクター(論理ORと見なす)に一致する要素を選択するため、同じものではありません(混乱を招く可能性があることがわかりますが)。
Sasha Chedygov、2015年

174

これを行うには、次のfilter()関数を使用します。

$(".a").filter(".b")

16
この回答と承認された回答の違いは何ですか?
ビビアンリバー

49
@Rice:これは少し遅くなります。最初にクラス "a"のオブジェクトのリストを作成し、次にクラス "b"を持つオブジェクト以外をすべて削除するためです。しかし、それ以外は違いはありません。
サーシャチェディゴフ2011

5
これは、変数として定義されたクラスを検索していたインスタンスで機能しましたが、最初の例の構文では機能しませんでした。例:$( '。foo')。filter(variable)。ありがとう
pac

7
@pac:$( '。foo' + variable)でトリックを実行できたはずですが、この場合、このメソッドの方がより明確になるはずです。
サーシャチェディゴフ

6
これは、が既に見つかり.a、元の.aセットにも属しているさまざまな任意のクラスに基づいて複数回フィルタリングする必要がある場合にも、より効率的です。
Qix-モニカは2014年

123

ケースについて

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

.aとの間にスペースを入れる必要があります.b.c

$('.a .b.c')

あなたの答えに加えて、ケースが以下の場合にbとcの両方にアクセスする方法を知りたいです:<element class = "a"> <element class = "b"> </ element> <element class = "c" > </ element> </ element>?$( '。a .b.c')を使用すると、間違った結果が返されます。
Ipsita Rout 2013

この例では、セレクター$('.a .c.b')も機能しますか?
ダニエルW.

はい、順序は関係ありません。
Zim84

$('.a > element')
Alex

63

あなたが抱えている問題は、あなたがを使用しているということですがGroup Selector、あなたはMultiples selector!具体的には、を使用$('.a, .b')する必要があるのに対し、を使用しています$('.a.b')

詳細については、以下のセレクタを組み合わせるさまざまな方法の概要をご覧ください。


グループセレクタ: "、"

すべての<h1>要素およびすべての<p>要素およびすべての<a>要素を選択します。

$('h1, p, a')

マルチプルセレクター: ""(文字なし)

のすべての<input>要素を選択しtype text、クラスcodered

$('input[type="text"].code.red')

子孫セレクタ: ""(スペース)

<i>要素内のすべての要素を選択します<p>

$('p i')

子セレクター: ">"

<ul>要素の直接の子であるすべての要素を選択します<li>

$('li > ul')

隣接する兄弟セレクタ:「+」

<a>要素の直後に配置されているすべての要素を選択します<h2>

$('h2 + a')

一般兄弟セレクター: "〜"

<span>要素の兄弟であるすべての要素を選択します<div>

$('div ~ span')

38

$('.a .b , .a .c').css('border', '2px solid yellow');
//selects b and c
<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>


26

要素の別のケースに言及してください:

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

入力するだけです: $("div#title1.A.B.C")



20

より良いパフォーマンスのためにあなたは使うことができます

$('div.a.b')

これは、ページ上にあるすべてのhtml要素をステップスルーするのではなく、div要素のみを調べます。


9

グループセレクター

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;}

これになる:

body, th, td {font-size: 12px; font-family: arial, helvetica, sans-serif;}

したがって、あなたの場合、あなたはグループセレクターを試しましたが、その交差点は

$(".a, .b") 

代わりにこれを使用してください

$(".a.b") 

4

jQueryこれは必要ありません

ではVanilla、あなたが行うことができます。

document.querySelectorAll('.a.b')

2018年は正しいが、この質問は2009年に出されなかった
Michiel

3

あなたのコード$(".a, .b")は複数の要素の下で(同時に)動作します

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

<element class="a b">コマなしでjsを使用するよりも、aとbの両方のクラスを持つ要素を選択する場合

$('.a.b')

2

好きなgetElementsByClassName()方法でメソッドを使うことができます。

var elems = document.getElementsByClassName("a b c");
elems[0].style.color = "green";
console.log(elems[0]);
<ul>
  <li class="a">a</li>
  <li class="a b">a, b</li>
  <li class="a b c">a, b, c</li>
</ul>

これも最速のソリューションです。あなたはそれについてのベンチマークをここで見ることができます


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.