2012-01-03 9 views
9

Często widzę przykłady użycia słowa kluczowego this w jquery. Czasami widzę, że jest używany z $ i nawiasami, innym razem bez. I myślałem, że widziałem, jak to było używane z każdym z nich.

Więc

var id = this.attr('id'); 

var id = $(this).attr('id'); 

var id = $this.attr('id'); 

Są one wszystkie takie same? Czy istnieje preferowany sposób? Czy jest rzeczą javascript i $(this) rzeczą jQuery? Jeśli tak, to gdzie spadł $this?

Wiem, że jest to prawdopodobnie całkowite pytanie początkujących, ale nie byłem w stanie uzyskać prosty, this, sam do pracy. Mogę tylko pracować $(this). Nie jestem pewien, czy robię coś źle, czy też czytałem przykłady literówek.

+1

'this' jest samodzielnym odwołaniem do js i umieszczenie $() po prostu opakowuje je klasą jquery. Co odnosi się do $ this - jest to tylko nazwa zmiennej (nie jest wstępnie zdefiniowana) i jest zwykle używana w wtyczkach jquery tylko po to, aby zawsze mieć odniesienie do klasy nadrzędnej 1. poziomu z klas potomnych –

Odpowiedz

10

this to JavaScript. Odnosi się do "kontekstu", w którym działa funkcja. W przypadku większości programów obsługi zdarzeń jest to element DOM ("raw"), który nasłuchuje zdarzenia. W innych sytuacjach będzie to oznaczać inne rzeczy; Googling "this w JavaScript" może być pouczający.


powiedzieć, że jest „surowy” elementu DOM, ponieważ jQuery jest często używany do owinąć ślizgowych elementów DOM w opakowaniu jQuery, dzięki czemu można korzystać z metod jQuery jak attr zamiast zwykłej te (getAttribute, setAttribute itp.). To owijanie odbywa się za pomocą funkcji $ i tam widzisz $(this). Na przykład:

this.getAttribute("href") 
/* or */ someElement.getAttribute("href") 

jest taka sama jak

$(this).attr("href") 
/* or */ $(someElement).attr("href") 

$this lub this$ jest tylko nazwa zmiennej.Ale często jest to konwencjonalny zrobić zadanie jak

var $this = $(this); 

Powodem tego jest to, aby uniknąć ciągłego wywoływania funkcji $, która jest nieco droższe, gdyż tworzy nowy jQuery opakowaniu obiektu za każdym razem. Jeśli przechowujesz zawinięty element w zmiennej, zyskujesz trochę na wydajności.


W rzadkich przypadkach this może już być owijką jQuery. Przypadku, który pojawia się często dla mnie jest podczas pisania wtyczek jQuery. W takim przypadku możesz zrobić rzeczy takie jak: this.attr("id") bezpośrednio, bez owijania go, ponieważ jest już zapakowany. W zwykłych przypadkach (programy obsługi zdarzeń, $.each itp.) Opakowanie jest konieczne.

+0

+1 Świetna odpowiedź. Bardzo dokładny. – ThinkingStiff

+0

Tak, świetna odpowiedź. I ta ostatnia część pomaga wyjaśnić coś, co gdzieś przeczytałem, ale mogłabym to znaleźć. Widziałem 'this.attr (" id ")', ale to nie działało dla mnie. Myślę, że to najbardziej mnie zdezorientowało. –

5

this jest natywnym obiektem JavaScript, który odnosi się do bieżącego obiektu. W jQuery funkcje zdefiniowane jako jQuery.fn., this to obiekt jQuery sam. $(this) jest sposobem jQuery przekształcenia kodu JavaScript this w obiekt jQuery. A $this to po prostu nazwa zmiennej. Jeśli go nie zdefiniowałeś, byłby to undefined.

Oto dobry wyjaśnienie użycia jQuery z this:

http://www.learningjquery.com/2007/08/what-is-this

+1

'this' nie jest używane tylko w procedurach obsługi zdarzeń, jest odniesieniem do bieżącego obiektu. Oto dalsze wyjaśnienie: http://justin.harmonize.fm/index.php/2009/09/an-introduction-to-javascripts-this/ – voithos

+0

@voithos Dzięki. Zaktualizowano. – ThinkingStiff

8

'to' jest JavaScript Object kluczowe dla odnosząc się do bieżącego obiektu, '$ (this)' jest funkcja otoki jQuery że zamienia bieżący obiekt na obiekt jQuery, a gdy zobaczysz "$ this", zwykle odnosi się to do zmiennej, którą programista stworzył, aby odnieść się do obiektu $ (this), jest to przydatne podczas pętli $ .each. Na przykład:

$(function(){ 
    $('a').click(function(){ 
    var $this = $(this); // refers to the $('a') object 
    $('div').each(function(){ 
     $(this).hide(); // $(this) refers to each 'div' in the loop, not the $('a') 
     $this.css({ color: 'blue' }); // turns the link element text blue 
    }); 
    }); 
}); 
+0

Czy możesz wyjaśnić swoją odpowiedź, aby pokazać, kiedy i dlaczego zwykły "to" może wejść w grę – veeTrain

+0

Jedynym powodem użycia zwykłego "to" w tej sytuacji jest, jeśli potrzebujesz dostępu do metody lub zmiennej w surowym węźle DOM, takim jak jak tutaj: http://www.w3schools.com/jsref/dom_obj_node.asp Na przykład nie można użyć metody jQuery na zwykłym "tym", takim jak: this.hide(); – afrederick

+0

Och ... Rozumiem. Czy można więc bezpiecznie stwierdzić, że "operacja" wykonywana na "tym" mogłaby być niezgodna z przeglądarkami? Natomiast zawijanie go w '$()' i używanie metody jQuery byłoby dużo bezpieczniejsze? Dobrze byłoby zaktualizować swoją odpowiedź, aby odzwierciedlić te implikacje tego "tego", ponieważ OP chciał wiedzieć o tym – veeTrain

1

zamiast wielokrotnie wywoływać $(this), bardziej efektywnie jest przechowywać go jako zmienną, zwykle nazywaną $this, aby ludzie wiedzieli, co to jest.