jQuery-выбор элементов внутри элемента


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

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

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

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

7 65

7 ответов:

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

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

посмотреть

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

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

или

$("#foo > #moo")

или

$("#foo > span")

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

$("#foo span")

или

$("#foo > span")

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

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

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

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

var name = $('#div1').find('#txtName').val();

оба работают.

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

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

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

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

например.

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

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

демо