2009-09-17 7 views

Répondre

10

UPD: désolé, cela est une mauvaise réponse, voir les commentaires. This est une réponse correcte.

Quelque chose comme ceci:

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

OU une légère modification de ma première tentative de répondre à cette question:

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

Amélioration recommandée: utilisez 'var' pour déclarer correctement 'images' et 'i'. – bobbymcr

+2

Cela ne fonctionne pas - voir l'explication ci-dessous. – bobince

+0

Comme Bobince souligne, cette réponse ne tient pas compte du fait que le NodeList retourné par getElementsByTagName est en direct .. – NickFitz

6

Avec jQuery:

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

Dois-je inclure toute la bibliothèque pour une tâche simple? – steven

+2

+1 jQuery ... pas besoin de réinventer la roue. :-) – beggs

+2

@beggs: Je ne suis pas d'accord. Donner une réponse JQuery quand il n'y a aucune indication que le framework JQuery est utilisé, c'est comme donner une réponse basée sur .NET à la question C++. Si vous l'utilisez très bien et que c'est correct comme commentaire, c'est peut-être un peu à considérer mais ce n'est pas une réponse à une question non-Jquery. Réponse n1313 est à peine la science des fusées et l'ajout d'un grand cadre .js à votre page afin que vous ne "réinventez la roue" n'a tout simplement pas de sens. – AnthonyWJones

0

Sans l'utilisation de bibliothèques externes:

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

Ou en utilisant jquery:

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

J'étais ninja'd;) – Keeper

34

La réponse précédente ne supprime chaque seconde image. Rappelez-vous que NodeLists retourné par getElementsByTagName ou d'autres méthodes DOM sont 'live'. Cela signifie que lorsque vous supprimez l'image 0, les images 1-n descendent à 0- (n-1); c'est une «itération destructrice».

Pour éviter cela, faites une copie de tableau statique de la NodeList (comme la réponse jQuery fait efficace), ou, plus rapide, juste itérer la liste arrière:

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

Une réponse qui fonctionne, espérons que steven met à jour la réponse acceptée pour refléter cela. –

12

Cela devrait fonctionner aussi:

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

Oui, c'est une bonne approche de l'itération destructive, quand vous savez que vous allez supprimer * chaque * élément. – bobince

+0

C'est la meilleure réponse, car la syntaxe while associée à la NodeList en direct est plus claire. – eyelidlessness

Questions connexes