2015-07-05 24 views
8

Sono un po 'confuso dai nodi DOM, principalmente solo i termini.Che cos'è un elemento "fuori DOM"?

In precedenza pensavo che il DOM fosse quello che vedevo nel mio ispettore, niente di più & niente di meno. Ora sono a conoscenza di funzioni come document.createElement() che creano nodi DOM che hanno il mio documento come 'contesto', ma non hanno il documento come 'genitore'. document.createElement() crea "fuori dai nodi DOM"?

E non è forse un termine improprio? Un "nodo" è sinonimo di "nodo DOM" o "Elemento HTML", secondo la mia comprensione. Non è male chiamare per chiamare qualcosa "fuori dal nodo DOM", quando i nodi sono cose in un DOM? Il termine sembra auto contraddittorio.

Per aggiungere ulteriore confusione, ci sono nuovi concetti come percorsi di sostegno, nodi DOM rimosso, appesi nodi DOM, ombra frammenti DOM, documenti, ecc

Quale di questi termini sono sinonimi? Quali sono gli errori? E quali sono le specifiche attuali (bonus per il collegamento alle specifiche).

+1

che i nodi possono esistere nel DOM non significa che devono. È come una persona può sedere in una macchina ma è ancora una persona fuori dalla macchina, o in un autobus. E tutti questi termini sono perfettamente google: in grado (incluso 'node'). – Jan

+0

Ho cercato su Google per oltre un'ora prima di pubblicare questa domanda. Il tuo commento non è utile perché dire che i nodi possono esistere "in" o "fuori" del documento è qualcosa che riconosco nella mia domanda. Sto cercando una risposta dettagliata che spiega le differenze tra genitore e contesto, nodo ed elemento, ecc ... o una risposta che afferma che sono termini sinonimi con un collegamento a una specifica per eseguirne il backup. –

+0

Ho la sensazione che tu ti stia solo un po 'troppo appeso su alcuni termini. È assurdo chiamare un tram un tram se non è su una strada? Non è davvero così difficile comprendere qualcosa che viene rimosso dal suo tipico luogo di esistenza, vero? –

risposta

5

E il termine "fuori dai nodi DOM" non è un termine improprio?

No. Innanzitutto, quando si parla di "DOM" per HTML, si riferisce al DOM HTML. A node can exist in the HTML DOM or not. Un nodo (nel senso in cui stiamo parlando ora) è solo la parte più piccola che può costituire o essere parte di un DOM.

Come tale, potrebbe esistere ovunque e rimanere un nodo. Un motore è ancora un motore se è staccato dalla macchina. Non è molto utile finché non viene messo nel posto "giusto".

Un "nodo" è sinonimo di "nodo DOM" o "Elemento HTML", secondo la mia comprensione.

Un nodo PU CAN essere aggiunto al DOM HTML e si CAN be a HTML Element, ma è doesn't have to be. In HTML, un nodo di testo è anche un nodo per esempio. E un nodo può esistere in un documento HTML o documento XML o documento RSS o ...

Oppure potrebbe essere un nodo che è un elemento HTML ma esiste al di fuori del DOM HTML, solo in memoria, ad esempio. Qual è il caso durante la creazione dinamica dei nodi.

Non è male chiamare per chiamare qualcosa "fuori dal nodo DOM", quando i nodi sono cose in un DOM? Il termine sembra auto contraddittorio.

Per quanto sopra, no, non lo è. Un motore è ancora un motore e un nodo è ancora un nodo.

Per aggiungere ulteriore confusione, ci sono nuovi concetti come percorsi di sostegno

"Mantenere i percorsi" non ha nulla a che fare con il DOM, ma piuttosto JavaScript. Significa che finché c'è ancora un riferimento a una variabile/oggetto ovunque, quell'oggetto non è garbage collection. Non appena tutti i metodi/funzioni/elementi DOM che stanno "usando" l'oggetto sono raccolti, così è l'oggetto.

Fondamentalmente si tratta di garbage collection/memory leaks.Riguarda solo il DOM in quanto tutto ciò che è nel DOM viene "usato" e dovrebbe essere mantenuto.

staccati nodi DOM, appeso nodi DOM

"Out of nodo DOM" e "nodo DOM distaccato" sarebbe la stessa cosa, e sto cercando di indovinare "appeso nodo DOM" anche se io' non ho mai sentito che quello usato. Sembrano tutti implicare nodi che sono stati rimossi dal DOM ma sono ancora conservati in memoria tramite JavaScript.

E questi concetti non sono nuovi, JavaScript lo ha fatto per un breve periodo di tempo. Se sembrano nuovi è perché la gente ne parla di più.

ombra DOM, frammenti di documento, ecc

Questi sono chiaramente speccato nelle specifiche DOM HTML. Una rapida risposta è che Shadow DOM è ancora una cosa di JavaScript, e si tratta di dare ai tuoi elementi un ambito protetto e separare il contenuto dal rendering. Sembra confondere? Questo perché è una domanda completamente nuova in sé e dovresti davvero leggerlo.

Alcuni link per ottenere iniziare:

http://www.w3.org/DOM/
http://www.w3.org/TR/dom/
http://w3c.github.io/webcomponents/spec/shadow/
http://www.w3.org/TR/2014/REC-html5-20141028/

+0

Grazie. Quando dici che potrebbe esistere "ovunque", esiste un elenco definito di luoghi (ad esempio, uno di questi luoghi è nella memoria JS a causa dei percorsi di conservazione, che ho appreso negli ultimi mesi durante il debug delle perdite di memoria in un'app kiosk) . Un altro posto simile è nella memoria JS a causa delle chiamate a document.createElement(). Mi chiedo solo cos'altro c'è? Leggerò queste specifiche ... e contrassegnato come accettato dal momento che risponde alla domanda originale! Esattamente quello che stavo cercando. Il tuo commento originale è stato come dirmi che faccio schifo a Geometry. Questo è come spiegare che i quadrati sono rettangoli. Thnx. –

+1

I percorsi di mantenimento non hanno nulla a che fare con il DOM, ma piuttosto con JavaScript. Significa che finché c'è ancora un riferimento a una variabile/oggetto ovunque, quell'oggetto non è garbage collection. Non appena tutti i metodi/funzioni/elementi DOM che stanno "usando" l'oggetto sono raccolti, così è l'oggetto. In pratica si tratta solo di garbage collection/memory leaks. Riguarda solo il DOM in quanto tutto ciò che è nel DOM viene "usato". – Jan

+0

Capisco. Ma i percorsi di conservazione fanno sì che i nodi [DOM] esistano in memoria dopo la rimozione dal documento HTML. Sembra ancora strano pensare a "dove" questi esistono, dal momento che non riesco a controllarli (a parte fare le istantanee di heap). Credo che dovrei leggere queste specifiche un po 'meglio prima di chiedere troppe domande a risposta aperta, però. Ad esempio il tuo commento implica che i nodi sono oggetti. Sulla base di questo, probabilmente dovrei leggere. Sapevo che i nodi potevano essere avvolti in oggetti, ma non ero consapevole che fossero oggetti. Non siamo ancora sicuri se stiamo parlando di C++ (browser interni) o JS (userland), per esempio. –

Problemi correlati