jQuery селектор ребенка без родителей
Я смотрел на некоторый код из учебника по созданию меню карусели и заметил родительские дочерние селекторы без родительского. Никогда не видел этого раньше и смущен тем, что он на самом деле делает.
см. следующий код:
var $wrapper = $('> div', this).css('overflow', 'hidden'),
$slider = $wrapper.find('> ul'),
$items = $slider.find('> li'),
$single = $items.filter(':first'),
singleWidth = $single.outerWidth(),
visible = Math.ceil($wrapper.innerWidth() / singleWidth), // note: doesn't include padding or border
currentPage = 1,
pages = Math.ceil($items.length / visible);
учебник здесь: http://jqueryfordesigners.com/jquery-infinite-carousel/
3 ответов
есть родитель(или в данном случае scope
), обратите внимание на this
ключевое слово внутри селектора, это относительно элемента, к которому применяется плагин.
селекторы jQuery позволяют установить область, и это может быть любой объект элемента jQuery.
считают
$(".somediv").myplugin();
и внутри плагина
$("> div", this)
is actually translated to
$("> div", $(".somediv"))
взгляните на один из моих вопросов, ответ объясняет довольно много о jQuery селекторы. каков самый быстрый метод выбора элементов-потомков в jQuery?
этот селектор с контекстом:
$('> div', this)
получает перевернутый вокруг, чтобы использовать .find()
такой:
$(this).find('> div')
, который с >
ребенок-селектор всего:
$(this).children('div')
другие делают то же дело, они могли бы использовать .children()
, и на самом деле было бы более эффективно сделать это.
$('> div', this)
на this
важно. Это параметр контекста, который делает запрос, равной
$(this).children('div');
посмотреть документация $()
для получения дополнительной информации; он говорит об этом:
внутренне, контекст селектора реализован при .метод find, так что
$('span', this)
эквивалентно$(this).find('span')
.
$(this).find('> div')
означает " the div
s, которые являются детьми this
, что равно $(this).children('div')
.