Eu sou um iniciante em jQuery e ao passar por alguns exemplos de código eu encontrei:
$(document.body)
e $('body')
Existe alguma diferença entre esses dois?
jquery
document
document-body
Ashleedawg
fonte
fonte
$(body)
não funciona para.on('click'...
eventos, enquanto$(document.body)
e$(document)
ambos funcionam.Respostas:
Eles se referem ao mesmo elemento, a diferença é que quando você diz
document.body
que está passando o elemento diretamente para o jQuery. Alternativamente, quando você passa a string'body'
, o mecanismo do seletor jQuery tem que interpretar a string para descobrir a que elemento (s) ela se refere.Na prática, qualquer um deles fará o trabalho.
Se você estiver interessado, há mais informações na documentação da função jQuery .
fonte
As respostas aqui não estão totalmente corretas. Perto, mas há um caso extremo.
A diferença é que $ ('body') na verdade seleciona o elemento pelo nome da tag, enquanto document.body faz referência ao objeto direto no documento.
Isso significa que se você (ou um script invasor) sobrescrever o elemento document.body (vergonha!) $ ('Body') ainda funcionará, mas $ (document.body) não. Portanto, por definição, eles não são equivalentes.
Eu me arrisco a adivinhar que há outros casos extremos (como elementos globalmente identificados no IE) que também acionariam o que equivale a um elemento de corpo sobrescrito no objeto de documento, e a mesma situação se aplicaria.
fonte
document.body
como algo diferente de<body>
: i.imgur.com/unJVwXy.pngEu encontrei uma grande diferença no tempo ao testar em meu navegador.
Usei o seguinte script:
Fiz 10 milhões de interações e esses foram os resultados (Chrome 65):
Passar o elemento diretamente é cerca de 4 vezes mais rápido do que passar no seletor.
fonte
$(document.body)
está usando a referência globaldocument
para obter uma referência para obody
, enquanto$('body')
é um seletor no qual o jQuery obterá a referência para o<body>
elemento nodocument
.Nenhuma grande diferença que eu possa ver, nenhum ganho de desempenho perceptível de um para o outro.
fonte
$(document.body)
é mensuravelmente mais rápido de acordo com este artigo: sitepoint.com/jquery-body-on-document-onNão deve haver nenhuma diferença, talvez o primeiro seja um pouco mais performante, mas eu acho que é trivial (você não deve se preocupar com isso, realmente).
Com ambos, você envolve a
<body>
tag em um objeto jQueryfonte
Outputwise ambos são equivalentes. Embora a segunda expressão passe por uma pesquisa de cima para baixo na raiz do DOM. Você pode querer evitar a sobrecarga adicional (por mais minúsculo que seja) se você já tiver o objeto document.body em mãos para o JQuery envolver. Consulte http://api.jquery.com/jQuery/ #Selector Context
fonte