2010-09-15 16 views
6

Mam następujący kod

$('a').click(function() { 
var url= this.href; 
alert(url); 
}); 

To działa dobrze i na pewno wystarczy zwrócony wynik jest adres URL tagu.

Jednak jeśli mogę zmienić powyższy kod do

$('a').click(function() { 
var url= $(this).href; 
alert(url); 
}); 

Rezultatem jest niezdefiniowany.

Ktoś pomoże mi to wyjaśnić? W tym celu walnę głową ...

+1

możliwy duplikat [$ (this) i to w jQuery] (http://stackoverflow.com/questions/ 3685508/this-and-this-in-jquery) –

Odpowiedz

19

$(this) tworzy obiekt jQuery, który owija this. Natywny obiekt DOM ma atrybut href, ale jQuery tego nie robi.

$(this).attr("href") będzie działać.

7

this w Twoim przypadku jest rzeczywista elementu DOM, więc tag kotwicy

$(this) jest obiektem jQuery, która otacza ten element DOM z całą dobrocią jQuery.

więc .href nie jest atrybutem tego obiektu jQuery, ale jest obiektem DOM.

można użyć $(this).attr('href'), aby osiągnąć to samo, używając obiektu jQuery.

2

Dzieje się tak, ponieważ używasz DOMElement javascript w pierwszym przykładzie i obiekt jQuery w drugim przykładzie. Obiekt jQuery obejmuje obiekt DOMElement i oferuje wiele funkcji.

Możesz uzyskać dostęp do adresu URL następująco:

$('a').click(function() { var url= $(this).attr('href'); alert(url); }); 
0

Różnica pomiędzy elementem DOM i wybór jQuery.

"To" w kodzie podanym powyżej jest odniesieniem do elementu DOM łącza. $ (this) tworzy wybór jQuery na podstawie elementu DOM zawierającego tylko ten link.

Wybór jQuery daje różne funkcje kosztem niewielkiej wydajności. Twój element linku ma właściwość href (tzn. Można uzyskać do niego dostęp za pośrednictwem this.href), podczas gdy wybór jQuery ma wszystkie normalne właściwości jQuery: &.

Aby uzyskać cel linku, this.href to zdecydowanie droga. Jest prostszy, szybszy i mniej szczegółowy.

0

Wiele dobrych odpowiedzi, po prostu chciałem dodać, że można to zrobić także:

$('a').click(function(e) { 
    alert($(this)[0].href); 
}); 
+0

To nie wyjaśnia różnicy między '$ (this)' i 'this'. –

Powiązane problemy