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 divs, которые являются детьми this, что равно $(this).children('div').