2010-11-22 4 views
13

Sto cercando un modo per rimuovere l'intero contenuto di una pagina Web utilizzando puro Javascript - nessuna libreria.Rimuovi tutto il contenuto utilizzando puro JS

Ho provato:

document.documentElement.innerHTML = "whatever"; 

ma non funziona: sostituisce l'interno dell'elemento <html/>. Sto cercando di sostituire l'intero documento, compresa se possibile la dichiarazione doctype e <?xml.

+10

'location = 'about: blank'' –

+0

A quale scopo? Javascript funziona sul DOM che è un livello superiore rispetto alla serializzazione HTML sottostante (ad esempio dove '

+0

@Yi Jiang Funziona, ma in realtà voglio rimanere nello stesso dominio ... –

risposta

22

penso che un browser assume giustamente una pagina con contenuti di tipo text/html sarà sempre una pagina web - così mentre si può fare qualcosa di simile ...

document.body.innerHTML = ''; 

sarà ancora avere un po 'HTML in giro.

Si potrebbe provare ...

document.documentElement.innerHTML = ''; 

... che mi ha lasciato con <html></html>.

Yi Jiang ha suggerito qualcosa di intelligente.

window.location = 'about:blank'; 

Questo ti porterà a una pagina vuota - un meccanismo interno fornito dalla maggior parte dei browser credo.

Penso tuttavia che la soluzione migliore sia utilizzare document.open() che cancella lo schermo.

+0

La prima risposta aggiornata era metà di quello che stavo cercando. Ma suppongo che cambiare il 'doctype' stia chiedendo un po 'troppo ... –

+1

@passcod Una volta modificato anche il doctype, stai cambiando il modo in cui il browser renderà il tuo HTML/CSS. Ciò * probabilmente * comporterà una ricarica della pagina. Non penso che tu possa cambiare un doctype al volo. – alex

+1

@alex cambiando ** window.location ** a ** 'about: blank' ** ha un problema con IE speciamente IE10 perché alcuni addon quando rilevano ** about: blank ** pagina lo riempiono con il loro contenuto – iman

0

Credo che questo lo farà

document.clear() //deprecated 

window.location = "about:blank" //this clears out everything 
+0

Questo non ha funzionato per me, ma l'ho provato su jsbin.com, che potrebbe fare qualcos'altro dietro le quinte. – alex

+0

@alex ..yeah Ho appena realizzato che document.clear() è stato deprecato. –

+0

@John Hartsock cambiando ** window.location ** a ** 'about: blank' ** ha un problema con IE speciamente IE10 perché alcuni addon quando rilevano ** about: blank ** pagina lo riempiono con il loro contenuto – iman

0

Im solo curioso di sapere il motivo per cui ci si vuole farlo. Ora non c'è modo che io sappia di sostituire assolutamente tutto alla dichiarazione doctype, ma se si vuole andare a quelle lunghezze perché non reindirizzare l'utente a una pagina appositamente predisposta che ha il modello che ti serve con il doctype di cui hai bisogno e poi compilare il contenuto lì?

MODIFICA: in risposta al commento, ciò che è possibile fare è rimuovere tutto il contenuto, quindi creare un iframe per riempire l'intera pagina e quindi avere il controllo totale del contenuto. Essere consapevoli che questo è un grande trucco e probabilmente sarà molto doloroso - ma che avrebbe funzionato :)

+0

A tutti chi ha chiesto le ragioni ... Questo mi è sembrato un modo semplice per eliminare tutto e ricominciare da zero in un userscript ... Posso includere qualsiasi codice JS che desidero e verrà eseguito nella pagina, non in una sandbox. La cosa 'doctype' è per quando voglio usare xhtml su un sito Web html. –

+1

In effetti, la soluzione di Steve è ottima ... basta modificare alcune cose per includere il 'doctype' ... –

+0

sì, sembra buono se non hai bisogno del supporto IE –

3
var i = document.childNodes.length - 1; 

while (i >= 0) { 
    console.log(document.childNodes[i]); 
    document.removeChild(document.childNodes[i--]); 
} 

Rimuove tutto (doctype anche) su 3,6 FF, Chrome 3.195, e Safari 4.0. Interruzioni di IE8 dal momento che il bambino vuole rimuovere il suo genitore.


Rivisitare un po 'più tardi, potrebbe anche essere fatto in questo modo:

while (document.firstChild) { 
    document.removeChild(document.firstChild); 
} 
+0

Sembra buono e funziona anche per me. – alex

+0

Ottimo, ma non è ancora possibile modificare il doctype ... che non importa molto. Firefox si è schiantato quando ho provato ... –

+1

La tua domanda "Come cambiare il doctype" o "Rimuovere tutto il contenuto con puro JS"? – Ben

1

Dopo che la pagina è già a pieno carico:

document.write(''); 
document.close(); 
+0

No, non funziona. –

+0

@ passcod - il test è sbagliato. Funziona bene – Alohci

+1

Si potrebbe semplicemente usare 'document.open()'. – alex

2

Secondo Dotoro's article on the document.clear method, loro (visto che è deprecato) consiglia di chiamare document.open invece, che cancella la pagina, poiché avvia un nuovo flusso.

In questo modo, si evita il brutto trucco about:blank. !

-2

rimuovere tutto ciò MA --- --- DOCTYPE html

var l = document.childNodes.length;  
while (l > 1) { var i = document.childNodes[1]; document.removeChild(i); l--; } 

testati su FIREFOX WEB ISPETTORE -! ChildNodes [1] è --- --- DOCTYPE html

0
document.documentElement.innerHTML=''; 
document.open(); 

Il metodo Document.open() apre un documento per la scrittura. se non utilizzare il metodo aperto, non puoi modificare documento dopo impostare innerHTML per stringa vuota

+1

Dovresti spiegare perché funziona. – ryanpcmcquen

0

credo che questo sarà ancora lasciare il nodo doctype in giro, ma:

document.documentElement.remove()

o l'equivalente

document.getElementsByTagName("html")[0].remove()