2012-09-06 16 views
72

Sono un principiante di JQuery e sto esaminando alcuni esempi in alcuni codici trovati.

$(document.body) e $('body')

Qualcuno potrebbe dirmi v'è alcuna differenza tra questi due?

+1

Uno è più veloce, tuttavia considerando che non verrebbe mai chiamato più volte su una singola pagina, la differenza tra i due è * molto * piccola. –

+0

'$ (body)' non funziona per '.on ('click' ...' eventi, mentre '$ (document.body)' e '$ (document)' funzionano entrambi. – rybo111

+3

L'affermazione sopra è falsa e c'è anche una piccola differenza nelle prestazioni, circa il 10% a favore di $ (document.body). Puoi vedere il confronto qui https://www.sitepoint.com/jquery-body-on-document-on/ – Sigismund

risposta

5

Non ci dovrebbe essere alcuna differenza, forse il primo è un po 'più performante, ma penso che sia banale (non dovresti preoccuparti di questo, davvero).

Con entrambi si avvolge il tag <body> in un oggetto jQuery

7

$(document.body) sta usando il riferimento globale document per ottenere un riferimento alla body, mentre $('body') è un selettore in cui jQuery otterrà il riferimento all'elemento <body> su document.

Nessuna differenza principale che io possa vedere, nessun guadagno di prestazioni evidente da uno all'altro.

+4

'$ (document.body) 'è misurabilmente più veloce secondo questo articolo: https: //www.sitepoint.it/jquery-body-on-document-on/ –

53

Si riferiscono allo stesso elemento, la differenza è che quando si dice document.body si passa l'elemento direttamente a jQuery. In alternativa, quando si passa la stringa 'body', il jQuery selector engine deve interpretare la stringa per capire a quale elemento (i) si riferisce.

In pratica, il lavoro verrà completato.

Se si è interessati, ulteriori informazioni sono disponibili nella documentazione per jQuery function.

+0

La prima istruzione non è completamente corretta. Possono * riferirsi allo stesso elemento. Di solito anche. Ma non sempre :). Vedi la mia risposta qui sotto. – jvenema

3

In uscita entrambi equivalgono. Anche se la seconda espressione passa attraverso una ricerca dall'alto verso il basso dalla radice DOM. È possibile evitare l'overhead aggiuntivo (per quanto minuscolo possa essere) se si dispone già di un oggetto document.body in mano affinché JQuery si concluda. Vedere http://api.jquery.com/jQuery/ #Selector Context

6

Le risposte qui non sono in realtà completamente corrette. Chiudi, ma c'è un caso limite.

La differenza è che $ ('body') seleziona effettivamente l'elemento dal nome del tag, mentre document.body fa riferimento all'oggetto diretto sul documento.

Ciò significa che se (o uno script canaglia) sovrascrive l'elemento document.body (vergogna!) $ ('Body') funzionerà ancora, ma $ (document.body) non lo farà. Quindi per definizione non sono equivalenti.

Mi piacerebbe immaginare che ci siano altri casi limite (come gli elementi di identificazione globale in IE) che attivano anche ciò che equivale a un elemento del corpo sovrascritto sull'oggetto del documento, e si applicherebbe la stessa situazione.

Problemi correlati