No momento, estou trabalhando neste tutorial: Introdução ao jQuery
Para os dois exemplos abaixo:
$("#orderedlist").find("li").each(function (i) {
$(this).append(" BAM! " + i);
});
$("#reset").click(function () {
$("form").each(function () {
this.reset();
});
});
Observe que no primeiro exemplo, usamos $(this)
para acrescentar algum texto dentro de cada li
elemento. No segundo exemplo, usamos this
diretamente ao redefinir o formulário.
$(this)
parece ser usado com muito mais frequência do que this
.
Meu palpite é que no primeiro exemplo, $()
está convertendo cada li
elemento em um objeto jQuery que entende a append()
função, enquanto que no segundo exemplo reset()
pode ser chamado diretamente no formulário.
Basicamente, precisamos $()
de funções especiais apenas para jQuery.
Isso está correto?
javascript
jquery
this
Kevin Wu
fonte
fonte
Respostas:
Sim, você só precisa
$()
quando estiver usando o jQuery. Se você quiser a ajuda do jQuery para fazer as coisas do DOM, lembre-se disso.Basicamente, toda vez que você recupera um conjunto de elementos, o jQuery o transforma em um objeto jQuery . Se você sabe que possui apenas um resultado, ele estará no primeiro elemento.
E assim por diante...
fonte
$(this)[0]
novothis
se eles sempre são os mesmos?$(this)[0]
eu estava apenas usando-o para ilustrar o conceito. :) Eu uso$("#myDiv")[0]
maisdocument.getElementById("myDiv")
embora.$()
é a função do construtor jQuery.this
é uma referência ao elemento de chamada DOM.Então, basicamente,
$(this)
você está apenas passando othis
in$()
como um parâmetro para poder chamar métodos e funções do jQuery.fonte
Sim, você precisa
$(this)
das funções do jQuery, mas quando quiser acessar os métodos javascript básicos do elemento que não usa o jQuery, basta usarthis
.fonte
Ao usar
jQuery
, é recomendável usar$(this)
normalmente. Mas se você sabe (deve aprender e saber) a diferença, às vezes é mais conveniente e mais rápido usar apenasthis
. Por exemplo:é mais fácil e mais puro do que
fonte
this
é o elemento,$(this)
é o objeto jQuery construído com esse elementoUm olhar mais profundo
this
MDN está contido em um contexto de execuçãoO escopo refere-se ao atual ECMA do contexto de execução . Para entender
this
, é importante entender como os contextos de execução operam em JavaScript.contextos de execução vinculam isso
Quando o controle entra em um contexto de execução (o código está sendo executado nesse escopo), o ambiente para variáveis é configurado (ambientes lexicais e variáveis - essencialmente, isso configura uma área para entrada de variáveis que já estavam acessíveis e uma área para variáveis locais a serem armazenada) e a ligação de
this
ocorre.O jQuery liga isso
Os contextos de execução formam uma pilha lógica. O resultado é que contextos mais profundos na pilha têm acesso a variáveis anteriores, mas suas ligações podem ter sido alteradas. Toda vez que o jQuery chama uma função de retorno de chamada, ele altera essa ligação usando o
apply
MDN .O resultado da chamada
apply
é que, dentro das funções de retorno de chamada do jQuery,this
refere-se ao elemento atual que está sendo usado pela função de retorno de chamada.Por exemplo, em
.each
, a função de retorno de chamada normalmente usada permite.each(function(index,element){/*scope*/})
. Nesse escopo,this == element
é verdade.Os retornos de chamada do jQuery usam a função apply para vincular a função que está sendo chamada com o elemento atual. Este elemento vem da matriz de elementos do objeto jQuery. Cada objeto jQuery construído contém uma matriz de elementos que correspondem à API jQuery do seletor usada para instanciar o objeto jQuery.
$(selector)
chama a função jQuery (lembre-se de que$
é uma referência ajQuery
, codewindow.jQuery = window.$ = jQuery;
:). Internamente, a função jQuery instancia um objeto de função. Portanto, embora possa não ser imediatamente óbvio, use$()
internamentenew jQuery()
. Parte da construção desse objeto jQuery é encontrar todas as correspondências do seletor. O construtor também aceitará strings e elementos html . Quando você passathis
para o construtor jQuery, está passando o elemento atual para um objeto jQuery a ser construído . O objeto jQuery então contém uma estrutura de matriz dos elementos DOM que correspondem ao seletor (ou apenas o elemento único no caso dethis
).Depois que o objeto jQuery é construído, a API do jQuery agora é exposta. Quando uma função API jQuery é chamada, ela itera internamente sobre essa estrutura semelhante a uma matriz. Para cada item da matriz, ele chama a função de retorno de chamada para a API, vinculando os retornos de chamada
this
ao elemento atual. Essa chamada pode ser vista no snippet de código acima, ondeobj
está a estrutura semelhante à matriz ei
é o iterador usado para a posição na matriz do elemento atual.fonte
Sim, usando
$(this)
, você ativou a funcionalidade jQuery para o objeto. Apenas usandothis
, ele possui apenas funcionalidade Javascript genérica.fonte
this
referencie um objeto javascript e$(this)
usado para encapsular com jQuery.Exemplo =>
fonte