2011-01-24 16 views
10

Esiste una differenza tra: $(document) e $("document")?

MODIFICA: anche quando nel .ready() ad es. $("document").ready()

risposta

19

$(document) utilizza jQuery per avvolgere l'oggetto globale document.

$("document") tentativi per cercare un elemento <document>, il che rende ovviamente non ha senso HTML perché non c'è tale elemento, solo oggetto radice document rappresentato nel markup dall'elemento <html>. Si comporta in questo modo perché passando la funzione jQuery a una stringa, gli stai effettivamente dando un selector.

Re edit: come patrick dw dice, nel contesto di ready() non c'è alcuna differenza, e infatti come di jQuery 3.0 utilizzando $(document) affatto o chiamando esplicitamente ready() è deprecato. Da documentation:

jQuery offre diversi modi per collegare una funzione che verrà eseguita quando il DOM è pronto. Tutti i seguenti sintassi sono equivalenti:

  • $(handler)
  • $(document).ready(handler)
  • $("document").ready(handler)
  • $("img").ready(handler)
  • $().ready(handler)

Come di jQuery 3.0, è consigliato solo la prima sintassi; le altre sintassi funzionano ancora ma sono deprecate. Questo perché la selezione non ha alcuna influenza sul comportamento del metodo .ready(), che è inefficiente e può portare a presupposti errati sul comportamento del metodo. Ad esempio, la terza sintassi funziona con "document" che non seleziona nulla. La quarta sintassi attende che il documento sia pronto ma implica (erroneamente) che attende che le immagini siano pronte.

+2

Risposta molto buona a quale era la domanda * attuale *. +1 – user113716

+0

Quindi qual è la differenza tra $ ("html") e $ (documento) quindi? – Andrew

+0

@Andrew: html è l'elemento principale del documento (document.documentElement), non l'oggetto del documento. Se si desidera modificare l'elemento html stesso (ad es. Aggiungendo o rimuovendo i nomi di classe), utilizzare $ ("html"), non $ (documento). – BoltClock

0

document è una variabile globale pre-fatto che è la rappresentazione del documento HTML corrente, abbreviazione di window.document.

$("document"), come sottolineato da @BoltClock, utilizza tale stringa come selettore per un elemento <document>.

1

Il tuo primo esempio cerca una variabile o un oggetto chiamato documento all'interno del tuo JS. (attenzione, è una variabile predefinita)

Il secondo cercherà nella pagina un tag con il nome "documento".

var document = 'div#logo'; 
$(document); //will search for div#logo 
$('document'); //will search for document 
7

Se stai parlando chiamando la funzione .ready(), è (attualmente) non fa differenza.

In entrambi i casi l'argomento viene ignorato.

Si potrebbe fare questo:

$("cheese pizza").ready(function() {}); 

Per essere chiari, è meglio usare le chiamate ufficialmente supportati in .ready(), che sono:

$(document).ready(function(){/*...*/}); 

e:

$(function(){/*...*/}); 

Quando atto selezionando U document, è necessario utilizzare $(document).

+0

Perché viene ignorato? – BoltClock

+0

Sicuramente c'è davvero una differenza. Stai dicendo che la chiamata '.ready()' funziona su qualsiasi oggetto jQuery? Se è vero, allora perché non potresti usare '$ .ready (...)'? –

+0

@ Greg, Bolt: ho aggiornato. Avevo imposto un altro pensiero alla domanda prematuramente. – user113716