2010-11-22 13 views
13

Estoy buscando una manera de eliminar todo el contenido de una página web utilizando JavaScript puro - sin bibliotecas.Eliminar todo el contenido utilizando JS puro

me trataron:

document.documentElement.innerHTML = "whatever"; 

pero eso no funciona: sustituye el interior del elemento <html/>. Estoy buscando reemplazar todo el documento, incluida, si es posible, la declaración doctype y <?xml.

+10

'location = 'about: blank'' –

+0

¿Para qué fin? Javascript funciona en el DOM que es un nivel superior que la serialización HTML subyacente (es decir, donde ''? Xml' y doctype son). –

+0

@Yi Jiang Esto funciona, pero en realidad quiero permanecer en el mismo dominio ... –

Respuesta

22

creo un navegador asume legítimamente una página con contenido de tipo text/html siempre será una página web - así que mientras usted puede hacer algo como ...

document.body.innerHTML = ''; 

aún tendrá algo de HTML dando vueltas.

Usted podría intentar ...

document.documentElement.innerHTML = ''; 

... que me dejó con <html></html>.

Yi Jiang sugirieron algo inteligente.

window.location = 'about:blank'; 

Esto lo llevará a una página en blanco, un mecanismo interno proporcionado por la mayoría de los navegadores, creo.

Creo que la mejor solución es usar document.open() que borrará la pantalla.

+0

La primera respuesta actualizada fue la mitad de lo que estaba buscando. Pero supongo que cambiar el 'doctype' es pedir demasiado ... –

+1

@passcod Una vez que cambie el doctype también, está cambiando la forma en que el navegador representará su HTML/CSS. Esto * probablemente * conllevará una recarga de página. No creo que puedas cambiar un tipo de documento sobre la marcha. – alex

+1

@alex cambiando ** window.location ** a ** 'sobre: ​​blank' ** tiene un problema con IE especialmente IE10 porque algunos complementos al detectar ** sobre: ​​página en blanco ** llenarlo con sus contenidos – iman

0

creo que esto va a hacer que

document.clear() //deprecated 

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

Eso no funcionó para mí, pero lo probé en jsbin.com, que puede estar haciendo algo más detrás de escena. – alex

+0

@alex ..yeah Acabo de darme cuenta de que document.clear() ha quedado en desuso. –

+0

@John Hartsock cambiando ** window.location ** a ** 'sobre: ​​blank' ** tiene un problema con IE especialmente IE10 porque algunos complementos al detectar ** sobre: ​​página en blanco ** llenarlo con sus contenidos – iman

0

Im curioso en cuanto a por qué te gustaría hacer eso. Ahora no hay forma de que sepa de reemplazar absolutamente todo a la declaración de doctype, pero si quiere ir a esas longitudes, ¿por qué no redirigir al usuario a una página especialmente diseñada que tiene la plantilla que necesita con el doctype que necesita y luego completar el contenido allí?

EDITAR: en respuesta a un comentario, lo que se puede hacer es quitar todo el contenido, crear un marco flotante, llenar toda la página y luego tener el control total del contenido. Tenga en cuenta que este es un gran truco y probablemente será muy doloroso - pero funcionaría :)

+0

A todos quién preguntó las razones ... Parecía una manera fácil de desmantelar todo y empezar de cero en un usuario. Puedo incluir el código JS que desee y se ejecutará en la página, no en un espacio aislado. El elemento 'doctype' es para cuando quiero usar xhtml en un sitio web html. –

+1

De hecho, la solución de Steve es genial ... solo tienes que modificar algunas cosas para incluir el 'doctype' ... –

+0

sí, suena bien si no necesitas soporte de IE –

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

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

Elimina todo (tipo de documento también) en FF 3.6, Chrome 3.195, y Safari 4.0. IE8 se rompe porque el hijo quiere eliminar a su padre.


volver a visitar un rato más tarde, también podría hacerse así:

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

Se ve bien y también me funciona. – alex

+0

Genial, pero aún no puedes cambiar el tipo de documento ... lo cual no importa mucho. Firefox se estrelló cuando lo intenté ... –

+1

¿Su pregunta es "Cómo cambiar el tipo de documento" o "Eliminar todo el contenido con JS puro"? – Ben

1

Después de la página ya se ha cargado completamente:

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

No, no funciona. –

+0

@passcod: su prueba es incorrecta. Esto funciona bien – Alohci

+1

Puedes usar 'document.open()'. – alex

2

Según Dotoro's article on the document.clear method, ellos (ya que es obsoleto) recomendamos llamar al document.open, lo que borra la página, ya que inicia una nueva transmisión.

De esta manera, evitas el desagradable truco about:blank. !

-2

ELIMINAR TODO PERO --- --- DOCTYPE html

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

probado en FIREFOX inspector web - childNodes [1] es --- --- DOCTYPE html

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

El método Document.open() abre un documento para escribir. si usted no utiliza método abierto, usted no puede modificar documento después establece innerHTML para cadena vacía

+1

Debe explicar por qué esto funciona. – ryanpcmcquen

0

creo que esto todavía dejará el nodo de tipo de documento dando vueltas, pero:

document.documentElement.remove()

o el equivalente

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

Cuestiones relacionadas