2010-08-16 19 views
10

Szukałem jakiegoś kodu z samouczka do tworzenia menu karuzeli i zauważyłem selektory rodzica nadrzędnego bez rodzica. Nigdy wcześniej tego nie widziałem i myliłem się z tym, co faktycznie robi.selektor podrzędny jquery bez rodzica

patrz poniższy kod:

 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); 

Tutorial tutaj: http://jqueryfordesigners.com/jquery-infinite-carousel/

Odpowiedz

3

Istnieje element nadrzędny (lub w tym przypadku scope), zwróć uwagę na słowo kluczowe this wewnątrz selektora, które odnosi się do elementu, do którego jest stosowana wtyczka.

Selektory jQuery umożliwiają ustawienie zakresu i może to być dowolny element elementu jQuery.

Rozważmy

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

i wewnątrz wtyczki

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

przyjrzeć się jednej z moich pytań, odpowiedź wyjaśnia trochę o selektorów jQuery. What is the fastest method for selecting descendant elements in jQuery?

1
$('> div', this) 

this jest ważne. Jest to parametr kontekst sprawia, że ​​zapytanie równą

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

Zobacz the documentation for $() więcej informacji; nie wspomina o tym w szczególności:

Wewnętrznie kontekst selektor jest realizowane metodą .find() tak $('span', this) odpowiada $(this).find('span').

$(this).find('> div') oznacza „div s, które są dzieci this, która jest równa $(this).children('div')

7

Ten selektor z kontekstu.

$('> div', this) 

zostaje przerzucony wokół użyć .find() takiego :

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

wh Ich z > child-selector tylko:

$(this).children('div') 

Pozostali robią taką samą ofertę, mogą skorzystać .children() i rzeczywiście byłoby bardziej efektywne, aby to zrobić.