Estoy tratando de hacer un script de usuario que elimine todas las imágenes únicas en una página determinada. Así que necesito comparar todos los enlaces y eliminar todos los únicos. Estoy tratando de hacerlo de esta manera:

var images = document.getElementsByTagName('img');

for(i = 0;i < images.length; i++){
   for(j = 0;j < images.length; j++){
       if(images[i].src.!(match(images[j])) images[i].remove()
}

O ocultarlo con "display: none"

0
passwd 7 may. 2016 a las 23:37

3 respuestas

La mejor respuesta
    function hideUnique() {
        var imgs = document.getElementsByTagName('img');
        var srcs = [];
        for (var i = 0, n = imgs.length; i < n; i++) {
            srcs[imgs[i].src] = (srcs[imgs[i].src] || 0) + 1;
        }
        for (var i = 0, n = imgs.length; i < n; i++) {
            if (srcs[imgs[i].src] == 1)
                imgs[i].style.display = 'none';
        }

    }
1
Alex Kudryashev 7 may. 2016 a las 21:47

Esto es similar a su código.

var images = document.getElementsByTagName("img");
var arr = [];
for(x in images){
    If(arr.indexOf(images[x].src) == -1){
           arr.push(images[x].src);
    }else
            images[x].style.display = "none";
    }
}
0
Natsathorn 7 may. 2016 a las 21:55

Puedes probar esto

var images = document.getElementsByTagName("img");
var imageSrcMap = {};

for(var i = 0; i < images.length; i++){
  if(!imageSrcMap[images[i].src]){
    imageSrcMap[images[i].src] = {
      count:0,
      position:[]
    }
  }  
  imageSrcMap[images[i].src].count++;
  imageSrcMap[images[i].src].position.push(i);
}

Object.keys(imageSrcMap).forEach(function(src){
  if(imageSrcMap[src].count === 1){
    images[imageSrcMap[src].position[0]].style.display = 'none';
  }
});
0
Haizhou Liu 7 may. 2016 a las 21:39