#jquery #jquery-selectors #parent-child
#jquery #jquery-селекторы #родитель-потомок
Вопрос:
допустим, у меня есть разметка, подобная этой:
<div id="foo">
...
<span id="moo">
...
</span>
...
</div>
и я хочу выбрать #moo.
почему $('#foo').find('span')
работает, а $('span', $('#foo'));
нет?
Комментарии:
1. Почему бы и нет
$('#moo')
? 😉 Кстати. это действительно работает: jsfiddle.net/fkling/k5X2r2. Я не знаю почему, но функция, которую я подключаю к выбранному диапазону, применяется ко всем диапазонам страницы, а не только к тому, который находится внутри #foo : (
3. Что делать, если у вас уже есть элемент, выбранный в переменной, так что, например, вы начинаете с
var ele = $("div #foo")
как вы можете перейти к moo отсюда (без использования ссылок на массивы)
Ответ №1:
Вы можете использовать любой из этих [начиная с самого быстрого]
$("#moo") > $("#foo #moo") > $("div#foo span#moo") > $("#foo span") > $("#foo > #moo")
Взгляните
Ответ №2:
На самом деле, $(‘#id’, this); выбрал бы #id на любом уровне потомка, а не только непосредственного дочернего элемента. Попробуйте это вместо:
$(this).children('#id');
или
$("#foo > #moo")
или
$("#foo > span")
Комментарии:
1.Это ничего не выберет, потому что элемент имеет идентификатор
moo
, а не класс.2. Стоит отметить, что
.children()
и.find()
похожи, за исключением того, что первый перемещается только на один уровень вниз по поддереву DOM.
Ответ №3:
Вы можете использовать find
опцию для выбора элемента внутри другого. Например, чтобы найти элемент с идентификатором txtName в определенном div, вы можете использовать как
var name = $('#div1').find('#txtName').val();
Ответ №4:
Почему бы просто не использовать:
$("#foo span")
или
$("#foo > span")
$('span', $('#foo'));
отлично работает на моей машине 😉
Комментарии:
1.
$($(elementA), 'tr#' key ' span')
у меня не работает (jQuery 1.10.2)
Ответ №5:
Взгляните сюда — для запроса подэлемента элемента:
$(document.getElementById('parentid')).find('div#' divID ' span.child');
Ответ №6:
….но $(‘span’, $(‘#foo’)); не работает?
Этот метод вызывается как предоставляющий контекст селектора.
В этом вы предоставляете второй аргумент селектору jQuery. Это может быть любая строка объекта css, точно такая же, какую вы передали бы для прямого выбора, или элемент jQuery.
например.
$("span",".cont1").css("background", '#F00');
В приведенной выше строке будут выбраны все области внутри контейнера с именем класса cont1
.
Комментарии:
1. Спасибо, что дали название метода, действительно ценится
Ответ №7:
кажется, оба работают.
смотрите скрипку:http://jsfiddle.net/maniator/PSxkS /