2010-03-19 2 views

ответ

3

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

var $container = $('div#myContainer'); 
var $panels = $container.children('div'); 

Это выбирает только детей, как у вас в настоящее время, используя его в качестве контекста аргумента фактически вызывает .find() внутренне, находя все потомки вместо только прямых детей.

+1

'$ ('> div', $ container)' работает тоже. –

+1

@Crescent - правда, но это далеко менее эффективный, получение дочерних узлов и проверка их против селектора - это гораздо более оперативная операция, чем '.find()' :) –

+0

Просто убедившись, что читатели понимают, что 'find' не означает рекурсивный спуск, он может работать и с прямыми детьми , То, как ваш ответ читает (для меня), помещает это в сомнение :) –

1

Да!

var $container = $('div#myContainer'); 
var $panels = $('div', $container); 

Это делает использование дополнительного аргумента context со стандартной функции JQuery(). Вы можете прочитать здесь: http://api.jquery.com/jQuery/#jQuery1

Вы также можете это сделать.

var $container = $('div#myContainer'); 
var $panels = $container.find('div'); 
+0

Это не использует селектор «родительский> ребенок», правда, правильно? В быстром тесте firebug кажется, что он выбирает слишком много элементов. – macca1

+0

Хороший звонок. Как всегда, ответ Ника Крейвера лучше моего. ( – jessegavin

+0

Я считаю, что ваш первый пример работает с var $ panels = $ ('> div', $ container); – macca1

Смежные вопросы