2011-12-12 19 views
11

Powiel możliwe:
jQuery $(this) vs this

Jaka jest różnica między "to" i "$ (this)"?

Skąd wiadomo, którego użyć?

pokrewne, myślę:

Z każdym trzeba opcjonalne parametry. Czym różni się "i" od "this" (lub "$ (this)")?

$('img').each(function(i) { ....code } 

vs.

$('img').each(function() { ....code } 
+0

Pytanie jest podobne, ale nieco inne, a generalnie dość trudno jest znaleźć informacje o "tym", ponieważ wyszukiwarki go ignorują. –

+0

Pytanie może być duplikatem, ale odpowiedź Józefa jest lepsza niż ta wybrana w drugim pytaniu. Byłem w stanie rozwiązać mój problem dopiero po przeczytaniu tych odpowiedzi, więc mam nadzieję, że zostaną zachowane dla przyszłych poszukiwaczy. –

+0

Jednym z powodów, dla których może to być duplikat, jest to, że wyszukiwanie "tego" w Google jest dość trudne. W rzeczywistości, kiedy pierwszy raz natknąłem się na OOP, zajęło mi ZA DŁUŻSZYM CZASEM znalezienie informacji o "tym" oraz "::" (paamayim nekudotayim). –

Odpowiedz

12

Obiekt Obiekt nie zmienia się. Jest właścicielem tej funkcji. W większości przypadków jest to po prostu węzeł i można odwoływać się do wszystkich jego właściwości, takich jak this.className. (pomyśl o tym, jak o węźle lub o tym, co otrzymasz z document.getElementById). To tylko "właściciel" funkcji.

Dlatego właśnie mijasz obiekt this do obiektu $() jQuery.

Wniosek: Jeśli chcesz użyć funkcji jQuery dla bieżącego węzła, użyj $(this). Ale jeśli chcesz uzyskać dostęp do obiektów własnych właściwości (np. .name, className, .id), użyj po prostu this.

+0

Myślę, że cytat o "tym" jest nieco mylący. – alex

+0

@alex proszę wyjaśnić, a może nawet zmienić moją odpowiedź. –

+1

Po prostu usunę cytat, twoja odpowiedź jest wspaniała. – alex

5

to dla javascript, $ (this) dla jQuery. możesz użyć $ (this) dla każdej funkcji jQuery, nie w tym przypadku.

Edit: Dla przykładu I jest po prostu zwiększany numer, że jest on (0 1. 10. 11To) dolarów (to) jest element img dokładnie można zrobić albo:

$(this).on('click', function() { console.log(123); }); 
or 
$('img').eq(i).on('click', function() { console.log(123); }); 

Edit2: Oto wykorzystania tego:

var sorter = { 
    sort: function() { 
     console.log('sorting'); 
    }, 
    requestSorting: function() { 
     this.sort(); 
    } 
} 
sorter.requestSorting.bind(sorter); 

w tym przykładzie jest to dokładnie używane jak $ this w klasie PHP. Dlatego powiedziałem, że to bardziej dla czystych funkcji javascript.

+1

* dotyczy to javascript * Co to dokładnie znaczy? – alex

+0

Oznacza to, że słowo kluczowe "to" jest podstawową funkcją javascript, natomiast "$ (this)" jest specyficznym dla jQuery, a nie podstawowym javascript. –

+0

user1040899, dzięki za edycję. Pomaga wyjaśnić, co zrobiłby "ja", ale nie wyjaśnia, dlaczego/kiedy preferowane byłoby używanie "$ (this)", co wydaje się prostsze w użyciu. +1 –

0
$(".class").click(function() { 

    $(this).load("/path/to/file.html"); 

}); 

W tym przykładzie this odnosi się do .class div i byłoby załadować zawartość file.html do wspomnianego div po kliknięciu na nim.

Kliknij przycisk .class, file.html zostanie załadowany do niego.

+0

Bardzo interesująca sztuczka. +1. Ale tak naprawdę nie wyjaśnia różnicę między $ (this) a tym lub wyjaśnić kiedy użyć. –

2

w jQuery ogólnie wskazuje na element DOM, taki jak HTMLSelectElement.

Przełożenie go za pomocą funkcji jQuery pozwala na wywołanie na niej metod jQuery.

+0

Co sądzisz o tym, co user1040899 powiedział, że "to" jest dla javascript, a $ (this) dla jquery? Jak rozumiem, "$" jest skrótem dla całego obiektu JQuery. –

+0

@ButtleButkus zobacz moją odpowiedź na informacje na ten temat. –

1

Umieszczenie tego wewnątrz $() zamienia to w obiekt jquery, z możliwością wywołania wszystkich typowych metod jQuery. to samo w sobie jest zwykłym odwołaniem do javascriptu dla danego obiektu/elementu.

+1

Więc zawsze mogę umieścić $() wokół "tego", aby użyć na nim metod jquery i uzyskać dostęp do właściwości jquery? –

+0

tak, jest to standardowa konwencja do tworzenia obiektów jquery. – thescientist

0

Czy trzeba $ (this), czy nie zależy od kontekstu pracujesz w

Need to:.

  • Podczas obsługi jQuery Imprezy ta jest przekazywana jako elementu DOM, który wyzwalane zdarzenie $ (this) zamienia element DOM w obiekt jQuery

  • Za każdym razem, gdy otrzymasz element DOM Inne wystąpienia, w których masz element DOM (lub obiekt) i chcesz przekształcić go w jQuery o bject

nie trzeba go:

  • wewnątrz jQuery Plug-in jQuery plug-in (jquery.fn) Funkcja ta jest obiektem jQuery już więc nie ma potrzeby stosowania $ (tutaj) tutaj.

Nie szkodzi w $ (this), nawet jeśli jest to obiekt jQuery jQuery bo po prostu wrócić do tego samego obiektu.

+0

OK, ale co z wewnątrz pętli ".each"? W innym pytaniu miałem trochę kodu, w którym używam "tego" zamiast "$ (this)", a odpowiadający powiedział, że było źle. Wewnątrz pętli ".each" nie mam dostępu do obiektu jquery, czy jest to element DOM? (tutaj jest inne pytanie, które mam na myśli: http://stackoverflow.com/questions/8463878/trying-to-set-css-property-left-to-using-jquery-centering-image-inside-div/8463929 # 8463929) –