jQuery: выбрать класс элемента и идентификатор одновременно?

170

У меня есть несколько ссылок, по которым я хочу выбрать класс и идентификатор одновременно.

Это потому, что у меня есть 2 разных поведения. Когда класс ссылок получает одно имя класса, они ведут себя одинаково, когда одни и те же классы ссылок получают другое имя класса, они ведут себя по-разному. Имена классов переключаются с помощью jquery.

Поэтому я должен иметь возможность выбрать класс ссылок и идентификатор одновременно. Это возможно?

Я пробовал:

 $("a .save #country")

без какого-либо результата.

ajsie
источник

Ответы:

305

Ты можешь сделать:

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

ИЛИ

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

ИЛИ

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

как ты предпочитаешь.

Так что да, вы можете указать селектор, который должен соответствовать идентификатору и классу (и, возможно, имени тега и тому, что вы хотите добавить).

Клетус
источник
41
Таким образом, в основном это выглядит так: $ ("# a .b") означает элемент с классом b внутри элемента с идентификатором a. $ ("# ab") означает элемент с классом b и идентификатором a. Хитрость заключается в промежутке между #a и .b
Singhal
13
Нужно быть осторожным, чтобы вы использовали селектор идентификатора перед классом, иначе он не работает. Пример: $ (". Save # country") ... не возвращает результаты.
sloomo
43

Просто добавлю, что ответ, который дал Алекс, сработал для меня, а не тот, который выделен в качестве ответа.

Этот не работал для меня

$('#country.save') 

Но этот сделал:

$('#country .save') 

поэтому мой вывод заключается в использовании пространства. Теперь я не знаю, пользуюсь ли я новой версией jQuery (1.5.1), но в любом случае надеюсь, что это поможет всем, у кого была похожая проблема.

Отредактируйте: полный кредит для объяснения (в комментарии к ответу Алекса) идет Феликсу Клингу, который говорит:

Пробел является селектором потомка, то есть AB означает «Сопоставить все элементы, которые соответствуют B, которые являются потомками элементов, соответствующих A». AB означает «выбрать все элементы, которые соответствуют A и B». Так что это действительно зависит от того, чего вы хотите достичь. #country.saveи #country .saveне эквивалентны.

Никола
источник
2
Является ли проблема, что вы сказали "контри", а не "страна"?
amindfv
8

Это будет работать при добавлении пробела между идентификатором и идентификатором класса

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

Alex
источник
1
на самом деле это работало для меня, так как оно не работало как $ ('countery.save'), так что спасибо!
Никола
1
Я обнаружил, что иногда это требовательно к пространству. вроде $ (. selector> .item # id) работает, а $ (. selector> .item #id) - нет.
Абе Петрильо
21
Пробел является селектором потомка , то есть A Bозначает «Сопоставить все элементы, которые соответствуют B, которые являются потомками элементов, соответствующих A». ABозначает «выбрать все элементы, которые соответствуют A и B». Так что это действительно зависит от того, чего вы хотите достичь. #countery.saveи #countery .saveне эквивалентны.
Феликс Клинг
2

В конце концов, применяются те же правила, что и для CSS.

Поэтому я думаю, что эта ссылка может быть полезна.

getack
источник
Не могли бы вы обобщить содержание вашей ссылки?
krlmlr
На самом деле, согласно api.jquery.com/category/selectors, у jQuery есть несколько собственных селекторов; кроме того, фактически не говорится, что поддерживаются все селекторы CSS 1-3 ...
SamB
@SamB Вы правы, но он говорит, что заимствует из CSS 1-3 и добавляет свой собственный. Я все еще думаю, что ссылка на материал W3C действительна для этого обсуждения.
akousmata
2

Как насчет этого кода?

$("a.save#country")
Пекка
источник
1
$("a.save, #country") 

выберет класс "a.save" и идентификатор "страны".

ОКВ
источник