jQuery - выбор элементов внутри элемента - PullRequest
81 голосов
/ 27 апреля 2011

скажем, у меня есть разметка, как это:

<div id="foo">
  ...
  <span id="moo">
    ...
  </span>
  ...
</div>

и я хочу выбрать # moo.

почему $('#foo').find('span') работает, а $('span', $('#foo')); нет?

Ответы [ 7 ]

115 голосов
/ 27 апреля 2011

Вы можете использовать любой из этих [начиная с самого быстрого]

$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")

Взгляните

50 голосов
/ 27 апреля 2011

На самом деле, $ ('# id', this); выбрал бы #id на любом уровне потомка, а не только непосредственного потомка. Попробуйте вместо этого:

$(this).children('#id');

или

$("#foo > #moo")

или

$("#foo > span")
8 голосов
/ 27 апреля 2011

Почему бы просто не использовать:

$("#foo span")

или

$("#foo > span")

$('span', $('#foo')); отлично работает на моей машине;)

6 голосов
/ 07 июля 2014

Посмотрите здесь - для запроса подэлемента элемента :

$(document.getElementById('parentid')).find('div#' + divID + ' span.child');

3 голосов
/ 04 декабря 2017

Вы можете использовать опцию find, чтобы выбрать элемент внутри другого. Например, чтобы найти элемент с идентификатором txtName в определенном div, вы можете использовать как

var name = $('#div1').find('#txtName').val();
2 голосов
/ 25 августа 2018

.... but $ ('span', $ ('# foo')); не работает?

Этот метод называется контекстом селектора .

В этом вы предоставляете второй аргумент для селектора jQuery . Это может быть любая строка объекта css, такая же, как если бы вы передавали ее для прямого выбора, или элемент jQuery.

например.

$("span",".cont1").css("background", '#F00');

В приведенной выше строке будут выбраны все промежутки внутри контейнера, имеющие класс с именем cont1.

DEMO

1 голос
/ 27 апреля 2011

оба, похоже, работают.

см. Скрипку: http://jsfiddle.net/maniator/PSxkS/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...