jQuery: wybrać klasę i identyfikator elementu w tym samym czasie?


170

Mam kilka linków, które chcę jednocześnie wybrać klasę i identyfikator.

Dzieje się tak, ponieważ mam 2 różne zachowania. Kiedy klasa linków ma jedną nazwę klasy, zachowują się w jeden sposób, gdy te same klasy linków mają inną nazwę klasy, zachowują się inaczej. Nazwy klas są przełączane za pomocą jquery.

Muszę więc móc jednocześnie wybrać klasę linków ORAZ id. czy to możliwe?

Próbowałem:

 $("a .save #country")

bez rezultatu.

Odpowiedzi:


305

Możesz to zrobić:

$("#country.save")...

LUB

$("a#country.save")...

LUB

$("a.save#country")...

jak wolisz.

Więc tak, możesz określić selektor, który musi pasować do ID i klasy (i potencjalnie do nazwy tagu i wszystkiego, co chcesz dorzucić).


41
Więc w zasadzie to tak: $ ("# a .b") oznacza element z klasą b wewnątrz elementu o id a. $ („# ab”) oznacza element z klasą bi id a. Sztuczka polega na spacji między #a i .b
Bhumi Singhal

13
Musisz uważać, aby użyć selektora id przed klasą, w przeciwnym razie to nie zadziała. Przykład: $ (". Save # country") ... nie zwraca wyników.
slotomo

43

Dodam tylko, że odpowiedź, którą udzielił Alex, zadziałała dla mnie, a nie ta, która jest wyróżniona jako odpowiedź.

Ten nie działał dla mnie

$('#country.save') 

Ale ten zrobił:

$('#country .save') 

więc moim wnioskiem jest użycie przestrzeni. Teraz nie wiem, czy chodzi o nową wersję jQuery, której używam (1.5.1), ale mam nadzieję, że pomoże to każdemu z podobnym problemem, który miałem.

edycja: pełny zasługa wyjaśnienia (w komentarzu do odpowiedzi Alexa) należy do Felixa Klinga, który mówi:

Spacja jest selektorem elementu podrzędnego, tj. AB oznacza „Dopasuj wszystkie elementy pasujące do B, które są potomkami elementów pasujących do A”. AB oznacza „wybierz wszystkie elementy pasujące do A i B”. Więc to naprawdę zależy od tego, co chcesz osiągnąć. #country.savei #country .savenie są równoważne.


2
Czy problem polega na tym, że zamiast słowa „kraj” powiedziałeś „poradnictwo”?
amindfv

8

Będzie działać podczas dodawania spacji między identyfikatorem a identyfikatorem klasy

$("#countery .save")...


1
w rzeczywistości to zadziałało dla mnie, ponieważ nie działało jak $ ('# countery.save'), więc dziękuję!
Nikola,

1
Zauważyłem, że czasami jest wybredna jeśli chodzi o przestrzeń. jak $ (. selector> .item # id) działa, ale $ (. selector> .item #id) nie.
Abe Petrillo

21
Spacja jest selektorem potomków , tj. A BOznacza „Dopasuj wszystkie elementy pasujące do B, które są potomkami elementów pasujących do A”. ABoznacza „wybierz wszystkie elementy pasujące do A i B”. Więc to naprawdę zależy od tego, co chcesz osiągnąć. #countery.savei #countery .savenie są równoważne.
Felix Kling

2

Ostatecznie obowiązują te same zasady, co w przypadku CSS.

Więc myślę, że to odniesienie może być cenne.


Czy mógłbyś podsumować treść swojego odniesienia?
krlmlr

Właściwie zgodnie z api.jquery.com/category/selectors jQuery ma własne selektory; również, tak naprawdę nie mówi, że wszystkie selektory CSS 1-3 są obsługiwane ...
SamB,

@SamB Masz rację, ale mówi, że pożycza z CSS 1-3 ORAZ dodaje własne. Nadal uważam, że link do rzeczy W3C jest ważny w tej dyskusji.
akousmata


1
$("a.save, #country") 

wybierze zarówno klasę „a.save”, jak i identyfikator „kraju”.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.