Дочерний селектор 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/

Ответ 1

Существует родительский элемент (или в этом случае a scope), обратите внимание на ключевое слово this внутри селектора, относительно элемента, к которому применяется плагин.

Селектора jQuery позволяют вам устанавливать область видимости, и это может быть любой элемент элемента jQuery.

Рассмотрим

$(".somediv").myplugin();

И внутри плагина

$("> div", this) 
is actually translated to 
$("> div", $(".somediv"))

Посмотрите на один из моих вопросов, ответ объясняет немного о селекторах jQuery. Каков самый быстрый способ выбора элементов-потомков в jQuery?

Ответ 2

Этот селектор с контекстом:

$('> div', this)

перевернулся, чтобы использовать .find() следующим образом:

$(this).find('> div')

который с > дочерний селектор:

$(this).children('div')

Другие делают ту же сделку, они могут использовать .children(), и на самом деле было бы более эффективно это делать.

Ответ 3

$('> div', this)

Важно this. Это параметр контекста, который делает запрос равным

$(this).children('div');

Для получения дополнительной информации см. документацию для $(); в нем конкретно упоминается следующее:

Внутри контекст селектора реализованный с помощью метода .find() поэтому $('span', this) эквивалентно $(this).find('span').

$(this).find('> div') означает "the div, которые являются дочерними элементами this, который равен $(this).children('div').