2012-03-30 6 views
7

Czy istnieje różnica pomiędzy następującymi selektorów:rodzic vs parentNode

var index = $(this).parent().index(); 
var index2 = $(this.parentNode).index(); 

Z tego co czytałem, parentNode jest szeroko wspierany.

Czy istnieje powód, aby zastosować jeden nad drugim?

Odpowiedz

7

Selektor jQuery .parent() wybiera bezpośredni węzeł nadrzędny wszystkie węzły w zestawie węzłów. Ponieważ jednak w twoim przykładzie zestaw węzłów to tylko jeden węzeł $(this), istnieje niewielka różnica praktyczna.

Ta różnica ma znaczenie, jeśli wykonano coś takiego, jak $(".foo").parent(), gdzie może być wiele węzłów, które mają klasę foo.

2

parentNode pochodzi JS, gdzie rodzic() nie jest.

Co robisz w kodzie jest owijania elementów DOM w obiekcie jQuery tak można nazwać jQuery specyficzne metody na nim. Tak więc nie można wywołać metody index() tylko na tym dokumencie.parentNode, ale można wywołać funkcję $ (this.parentNode) .index(), ponieważ stała się obiektem jQuery.

Pierwszym przykładem owija bieżącego elementu DOM jako obiekt jQuery i nie korzysta z metody jQuery rodzic(), aby odzyskać to dominująca i niż indeks tego rodzica. Twój drugi przykład bezpośrednio opakowuje parentnode bezpośrednio.

+1

Jeśli jest on powszechnie obsługiwany, co by różnica w tej sytuacji być? – r0m4n