2009-09-17 27 views

Respuesta

10

UPD: lo siento, esto es una respuesta incorrecta, ver los comentarios. This es una respuesta correcta.

Algo como esto:

images = document.getElementsByTagName('img'); 
for (i = 0; i < images.length; i++) { 
    images[i].parentNode.removeChild(images[i]); 
} 

O una ligera modificación de mi primer intento de responder a esta pregunta: ¿

var images = document.getElementsByTagName('img'); 
var l = images.length; 
for (var i = 0; i < l; i++) { 
    images[0].parentNode.removeChild(images[0]); 
} 
+2

Mejora recomendada: use 'var' para declarar correctamente 'imágenes' e 'i'. – bobbymcr

+2

Esto no funciona; consulte la explicación a continuación. – bobince

+0

Como bobince señala, esta respuesta no tiene en cuenta el hecho de que la NodeList devuelta por getElementsByTagName está activa .. – NickFitz

6

Con jQuery:

$("img").remove(); 
+5

¿Tengo que incluir toda la biblioteca para una tarea sencilla? – steven

+2

+1 jQuery ... no hay necesidad de reinventar la rueda. :-) – beggs

+2

@beggs: No estoy de acuerdo. Dar una respuesta de JQuery cuando no hay indicios de que el marco de JQuery esté en uso, es como dar una respuesta basada en .NET a la pregunta de C++. Si lo está usando bien y está bien como un comentario que puede ser considerado, pero no es una respuesta a una pregunta que no es de Jquery. La respuesta n1313 es difícilmente científica y agregar un marco grande .js a tu página para que no "reinventes la rueda" simplemente no tenga sentido. – AnthonyWJones

0

Sin usar bibliotecas externas:

var images = document.getElementsByTagName('img'); 
for(var i=0; i < images.length; i++) { 
    images[i].parentNode.removeChild(images[i]); 
} 

O usando jQuery:

$('img').remove(); 
+1

Fui ninja'd;) – Keeper

34

La respuesta anterior sólo eliminará cada segundo de imagen.

Recuerde NodeLists devuelto por getElementsByTagName u otros métodos DOM están 'en vivo'. Eso significa que cuando elimina la imagen 0, las imágenes 1-n se mueven hacia abajo a 0- (n-1); esta es una 'iteración destructiva'.

Para evitar esto, o bien hacer una copia de matriz estática de la NodeList (como la respuesta jQuery está haciendo con eficacia), o, más rápido, simplemente iterar la lista revés:

for (var i= document.images.length; i-->0;) 
    document.images[i].parentNode.removeChild(document.images[i]); 
+1

Una respuesta que funciona, esperemos que steven actualice la respuesta aceptada para reflejar esto. –

12

Esto debería funcionar también:

var images = document.getElementsByTagName('img'); 
while(images.length > 0) { 
    images[0].parentNode.removeChild(images[0]); 
} 
+0

Sí, este es un buen enfoque para la iteración destructiva, cuando sabes que vas a eliminar * cada * elemento. – bobince

+0

Esta es la mejor respuesta, ya que la sintaxis while combinada con Live NodeList es más clara. – eyelidlessness

Cuestiones relacionadas