JQuery'de birden çok sınıf içeren bir öğeyi nasıl seçebilirim?


2060

İki sınıf olan tüm unsurları seçmek istediğiniz ave b.

<element class="a b">

Yani, sadece her iki sınıfa da sahip olan unsurlar .

Kullandığımda $(".a, .b")bana birliği veriyor, ama kavşağı istiyorum.


2
Sendikaların ve kavşakların bize yeni başlayanlar için ne anlama geldiğini tanımlayabilirseniz iyi olur :)
Kolob Kanyonu

10
Kanyon birliği ve kavşak temel küme teorisi kavramlarıdır. Örneğin, bir birlik tüm Fransız konuşmacılar (hem erkekleri hem de kadınları içerir), kavşak ise Fransızca konuşan tüm kadınlar olacaktır (Fransızca konuşmayan herkesi ve kadın olmayan herkesi dışlar). Birlikler ve kavşaklar her seti tanımlayan herhangi bir sayıda özellik ile yapılabilir. en.wikipedia.org/wiki/Union_(set_theory) en.wikipedia.org/wiki/Intersection_(set_theory)
Katharine Osborne

6
Sanırım iki takım "kadınlar" ve "Fransızca konuşanlar" dır, sendika dünyadaki tüm kadınlar ve dünyadaki tüm Fransızca konuşanlar olacak, her ikisi de konuşmayan kadınlar Fransızca ve Fransızca konuşan erkekler. Kavşak, yazdığınız gibi, sadece Fransızca konuşan kadınlardır.
Teemu Leisti

Yanıtlar:


2626

Yalnızca her iki sınıftaki öğeleri (mantıksal AND gibi bir kavşak) eşleştirmek istiyorsanız , aralarında boşluk olmadan seçicileri birlikte yazın :

$('.a.b')

Sipariş alakalı değil, bu yüzden sınıfları da değiştirebilirsiniz:

$('.b.a')

Bir maç için Yani divbir kimliği vardır elemanı asınıflarıyla bve cşu yazılır:

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

(Uygulamada, büyük olasılıkla bu özelliğe ihtiyacınız yoktur ve genellikle bir kimlik veya sınıf seçici genellikle yeterlidir $('#a').)


9
@Flater: Sadece örnek uğruna. Ancak sınıflar bve cdinamik olarak eklenmişse yararlı olabilir ve öğeyi yalnızca bu sınıflara sahipse seçmek isteyebilirsiniz.
Sasha Chedygov

3
Aha, iyi bir nokta :-) Şimdiye kadar .hasClass () kullanırdım ama bu daha iyi bir gösterimdir.
flater

4
Bu seçim yöntemi de CSS örn .ab {stil özellikleri} bkz işe yarar: css-tricks.com/multiple-class-id-selectors
Chris Halcrow

30
@Shimmy: Evet. İki seçici arasındaki boşluk torunları aradığınız anlamına gelir; örneğin, .a .bsınıf elemanlarının arar bsınıfı ile bir elemanın soyundan a. Yani böyle bir şey div asadece bir elemanın içindekia elemanları döndürür . div
Sasha Chedygov

2
@AaA: Bu yanlış; jQuery'nin başlangıcından beri bu şekilde olmuştur, çünkü CSS böyle çalışır. Virgül, seçicilerin herhangi biriyle eşleşen öğeleri seçer (mantıksal bir OR olarak düşünün), ikisini birden değil, bu yüzden aynı şey değil (bunun nasıl kafa karıştırıcı olabileceğini görebiliyorum).
Sasha Chedygov

174

Bu filter()işlevi kullanarak yapabilirsiniz :

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

16
Bu cevap ile kabul edilen cevap arasındaki fark nedir?
Vivian River

49
@Rice: Bu biraz daha yavaş olacaktır, çünkü önce "a" sınıfı olan nesnelerin bir listesini oluşturacak, sonra "b" sınıfı dışındaki tüm nesneleri kaldıracak, oysa benimki bunu bir adımda yapacak. Ama aksi halde fark yok.
Sasha Chedygov

5
Bu, ilk örnekte sözdizimi ile çalışmayan, değişken olarak tanımlanan bir sınıfı aradığım bir örnekte işe yaradı. örneğin: $ ('. foo'). filtre (değişken). Teşekkürler
pac

7
@pac: $ ('. foo' + değişken) hile yapmış olmalı, ancak bu durumda bu yöntemin nerede daha net olacağını görebiliyorum.
Sasha Chedygov

6
Bu, daha önce bulduysanız .ave orijinal .akümeye ait birden fazla kez tabanlı farklı rasgele sınıfları filtrelemeniz gerekiyorsa da daha etkilidir .
Qix - MONICA

123

Dava için

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

.aVe arasına boşluk bırakmanız gerekir..b.c

$('.a .b.c')

Cevabınıza ek olarak Durum aşağıdaki gibi ise hem b hem de c'ye nasıl erişeceğinizi bilmek istiyorum: <element class = "a"> <element class = "b"> </element> <element class = "c" > </element> </element>? $ ('. A .b.c') yoluyla yanlış sonuç verir.
Ipsita Rout

Bu örnekte, seçici $('.a .c.b')de çalışır mı?
Daniel W.

Evet, sipariş önemli değil.
Zim84

$('.a > element')
Alex

63

Sahip olduğunuz sorun, a kullanmanız Group Selector, oysa a Multiples selector! Daha açık olmak gerekirse, $('.a, .b')kullanmalısınız $('.a.b').

Daha fazla bilgi için, aşağıdaki seçicileri birleştirmenin farklı yollarına genel bakış konusuna bakın!


Grup Seçici: ","

Tüm <h1>öğeleri VE tüm <p>öğeleri VE tüm <a>öğeleri seçin:

$('h1, p, a')

Çoklu seçici: "" (karakter yok)

Sınıflarının ve <input>öğelerinin tüm öğelerini seçin :type textcodered

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

Torun Seçici: "" (boşluk)

<i>Öğelerin içindeki tüm öğeleri seçin <p>:

$('p i')

Çocuk Seçici: ">"

<ul>Bir <li>öğenin hemen alt öğesi olan tüm öğeleri seçin :

$('li > ul')

Bitişik Kardeş Seçici: "+"

<a>Öğelerden hemen sonra yerleştirilen tüm öğeleri seçin <h2>:

$('h2 + a')

Genel Kardeş Seçici: "~"

<span>Öğelerin kardeşleri olan tüm öğeleri seçin <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

Sadece elementli başka bir durumdan bahsedin:

Örneğin <div id="title1" class="A B C">

Sadece yaz: $("div#title1.A.B.C")



20

Daha iyi performans için kullanabilirsiniz

$('div.a.b')

Bu, sayfanızdaki tüm html öğelerine adım atmak yerine yalnızca div öğelerine bakacaktır.


9

Grup Seçici

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

Bu olur:

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

Yani sizin durumunuzda grup seçiciyi denediniz, oysa bir kavşak

$(".a, .b") 

bunun yerine bunu kullan

$(".a.b") 

4

Buna gerek yok jQuerybunun için

Gelen Vanillayapabileceğiniz:

document.querySelectorAll('.a.b')

2018'de doğru, ancak bu soru 2009'da sorulmadı
Michiel

3

kodunuz $(".a, .b")birden fazla öğenin altında çalışacaktır (aynı anda)

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

Eğer <element class="a b">koma olmadan js kullanmak gibi her iki sınıfa da ve b'ye sahip öğe seçmek istiyorsanız

$('.a.b')

2

İstediğiniz şey için getElementsByClassName()yöntem kullanabilirsiniz .

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>

Bu da en hızlı çözüm. burada bununla ilgili bir kıyaslama görebilirsiniz .


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.