2013-04-17 1 views
14

Je voudrais trouver le nombre d'images dans un élément spécifique (div) qui ont la propriété 'complete' (comme dans le navigateur a terminé de les charger).Comment trouver le nombre d'images 'complètes'?

Je trébuche depuis plus d'une heure maintenant et mon cerveau est complètement frit. De l'aide serait grandement appréciée.

Merci

+0

Peut-être que cela aiderait http://stackoverflow.com/questions/4958081/find-all-elements-with-a-certain-attribute-in-jquery – AliBZ

Répondre

13

Pour répondre à votre question immédiate pour trouver des images avec la propriété complete, vous pouvez utiliser ceci:

var container = document.getElementById("div_id"), 
    images = container.getElementsByTagName("img"), 
    completeImages = [], 
    j = images.length, 
    i, cur; 
for (i = 0; i < j; i++) { 
    cur = images[i]; 
    if (cur.complete) { 
     completeImages.push(cur); 
    } 
} 

Une fois ce code est exécuté, completeImages est un tableau de <img> éléments qui ont Propriété complete en tant que true.

Avec jQuery, vous pouvez utiliser:

var images = $("#div_id").find("img").filter(function() { 
    return $(this).prop("complete"); 
    // or 
    return this.complete; 
}); 

Dans ce cas, images, est un objet jQuery (objet semblable à un tableau) de <img> éléments qui ont la propriété complete comme true.

Au lieu de vérifier la propriété complete, une autre option est d'utiliser l'événement load pour détecter le moment où ils chargent et ensemble de données spéciales pour eux:

$("#div_id").on("load", "img", function() { 
    $(this).data("image-complete", true); 
}); 

et pour savoir qui/combien sont chargés:

$("#div_id").find("img").filter(function() { 
    return $(this).data("image-complete"); 
}); 

Notez que l'événement load n'est pas entièrement pris en charge/fiable avec <img> s: http://api.jquery.com/load-event/ - faites défiler jusqu'à la « caveat de l'événement de charge lorsqu'il est utilisé avec imag es "section.

+2

Merci, beaucoup d'informations utiles ici. '.load' est ce que j'avais essayé à l'origine, mais j'ai rencontré des problèmes parce que les images sont ajoutées dynamiquement afin que toute image mise en cache ne soit pas enregistrée avec' .load'. J'ai fini par utiliser la méthode '.filter' et ça marche très bien. Il me semble que plus je sais, plus je dois apprendre ... si cela a du sens. –

2

Vous pouvez également recréer le même comportement en utilisant des classes -

$("img").load(function(){ 
    $(this).addClass('complete'); 
}); 

Maintenant, chaque fois que vous voulez voir combien d'images ont été chargées, vous pouvez simplement utiliser ce sélecteur -

$("img.complete").length 
+1

Cela ne fonctionnerait-il pas uniquement avec les images initialement chargées? Les images avec lesquelles je travaille sont ajoutées dynamiquement, c'est pourquoi j'utilise la propriété 'complete' au lieu de '.load'. Quand j'ai essayé d'utiliser '.load', les images piratées n'ont pas été affectées/comptées –

Questions connexes