2009-09-21 19 views

risposta

6

ho fatto alcuni test su questo e ha scoperto che qualsiasi codice HTML al di là </html> viene aggiunto al <body> durante l'analisi. Quindi, in tutti i browser che ho provato (IE6/7, FF3, Opera10, Chrome2), il commento era accessibile come document.body.lastChild e il suo contenuto può essere recuperato tramite document.body.lastChild.data.

+0

Ottimo lavoro! In realtà avevo una riga vuota alla fine del mio file quindi document.body.lastChild.data era '\ n', ma guardando in firebug vedo che il commento esiste come un nodo figlio sul corpo. Grazie! –

+0

Questa non è una soluzione generica. – powtac

+0

Nice - usando questa tecnica con 'document.firstChild' per i commenti * prima * qualsiasi altro contenuto. –

2

Lo standard DOM per il nodo #document (la radice logica di un documento DOM) consente esattamente un nodo di elementi (ad esempio uno < HTML), ma molti nodi di commenti (e altri tipi di nodi più esoterici). Come tale, dovremmo aspettarci

document.lastChild 

essere il nodo di commento che si desidera in questo caso. Stranamente, questo non funziona (almeno in Safari 4).

Inserire un nodo di commento prima che il nodo HTML vada bene nei miei test. In questo caso, document.childNodes.length è 2 e document.firstChild è il commento. Mettendo un commento dopo che il nodo HTML sembra essere inserito nel posto sbagliato nel DOM - document.childNodes.length rimane a 1, e il nodo nell'ispettore DOM è visto come l'ultimo figlio del nodo BODY. Tuttavia, non riesco a trovare quel nodo utilizzando l'API DOM a tutti!

Questa sembra essere una stranezza nell'implementazione di DOM (almeno). Un rapido test con Firefox mostra che non può nemmeno trovare un nodo di commento se è la prima voce del documento!

Modifica: OK, come per il commento di Aaron e altri riflessioni, è probabile che il parser per la pagina stia semplicemente scartando i nodi durante l'analisi. Non sono più certo che si tratti di un bug, ma non riesco a trovare nulla nella specifica (XML) che permetta ai parser di scartare interi nodi di commenti - solo il loro contenuto testuale.

+1

Lo standard consente diversi commenti ma la maggior parte dei parser XML/HTML non li inserisce nel DOM. Non è un bug dal momento che lo standard non richiede loro di farlo. –

+0

quei commenti sono principalmente per il parser ... doctype ecc? – n00b

+0

Un doctype non è un commento (e utilizza una sintassi diversa). I commenti sono puramente per gli umani, ma * dovrebbero * essere preservati durante l'analisi, imo. –

Problemi correlati