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.

ajsie
źródło

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ć).

cletus
źródło
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.

Nikola
źródło
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")...

Alex
źródło
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.

getack
źródło
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
2

A co z tym kodem?

$("a.save#country")
Pekka
źródło
1
$("a.save, #country") 

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

okw
źródło