Справка по селектору JQuery

Как с помощью JQuery выбрать все элементы с классом x внутри элемента с идентификатором y?


person dmr    schedule 25.08.2010    source источник
comment
что вы хотите делать с этими элементами? Просто выберите их?   -  person Catfish    schedule 26.08.2010
comment
Разве идентификатор не должен быть уникальным?   -  person drummondj    schedule 26.08.2010
comment
@Catfish Нет, но остальное я знаю. Я просто путаюсь с выбором.   -  person dmr    schedule 26.08.2010
comment
@John Похоже, ты запуталась в моем вопросе. У меня есть элемент с идентификатором y. Есть много элементов, которые являются дочерними по отношению к этому элементу. У некоторых детей есть класс X. Я хочу выбрать всех детей с классом X.   -  person dmr    schedule 26.08.2010
comment
Извините, я неправильно прочитал вопрос.   -  person drummondj    schedule 26.08.2010
comment
Взгляните здесь stackoverflow.com/questions/3177763/   -  person Marko    schedule 26.08.2010


Ответы (5)


Выбор всех потомков с классом x элемента с идентификатором «y».

$("#y .x").each(function () {
   $(this) <- your element
});

Выбор всех дочерних элементов с классом x элемента с идентификатором «y».

$("#y > .x").each(function () {
   $(this) <- your element
});
person Lasse Espeholt    schedule 25.08.2010
comment
Первый код такой же, как $("#y").find(".x"), а второй такой же, как $("#y").find("> .x") - person BrunoLM; 26.08.2010
comment
@BrunoLM +1 Хорошее дополнение, но я предпочитаю свой метод. Кроме того, если он хочет вместо этого выполнить ex .click, тогда .each все равно удаляется. - person Lasse Espeholt; 26.08.2010

$('#y .x') должен сделать это за вас.

обратите внимание, что это выберет всех потомков с классом x, а не только детей.

person Andrew Wirick    schedule 25.08.2010
comment
+1 для краткости (иронично, что я не могу просто указать это как комментарий: комментарии должны быть не менее 15 символов в длину.) - person Homer; 26.08.2010

$("#x .y").doSomething();

$(".y", "#x").doSomething();

$("#x").find(".y").doSomething();

А для ближайших детей:

$("#x > .y").doSomething();

$("#x").children(".y").doSomething();

Взгляните на мой вопрос здесь, он говорит вам немного больше и касается производительности. Каков самый быстрый метод выбора дочерних элементов в jQuery?

person Marko    schedule 25.08.2010
comment
+1 - Подробный ответ. Просто подумал, что хочу указать, что во втором примере вам не нужно передавать объект jQuery для контекста. Вы можете просто передать строку "#x". jQuery незаметно превращает его в вашу третью версию. : o) - person user113716; 26.08.2010

Используйте 1_

person drummondj    schedule 25.08.2010

Если у вас есть элемент 1 с id = 'y' и вы хотите, чтобы все его [непосредственные] дочерние элементы имели class = 'x'

$("#y > .x").each(function(){stuff]);

Если вы хотите, чтобы все потомки id = 'y' (а не только сразу), вы бы сделали:

$("#y").find(".x").each(function(){stuff});

Очевидно, вы могли бы сделать его умнее (и лучше), добавив типы элементов, если вы знаете, что они из себя представляют. Например, если вам нужны только дочерние элементы типа, тогда:

$("#y > a.x").each(function(){stuff]);

Надеюсь, ты это имел в виду.

person patrickgamer    schedule 25.08.2010
comment
Использование .children() не дает вам всех потомков. Просто немедленно. Вы думаете о .find(), который вернет всех подходящих потомков. - person user113716; 26.08.2010