2013-04-17 9 views
14

मैं एक विशिष्ट तत्व (div) के भीतर छवियों की संख्या को ढूंढना चाहता हूं जिसमें संपत्ति 'पूर्ण' है (जैसे ब्राउज़र में उन्हें लोड करना पूरा हो गया है)।मुझे 'पूर्ण' छवियों की संख्या कैसे मिलती है?

मैं अब एक घंटे से अधिक समय तक इस पर ठोकर खा रहा हूं और मेरा दिमाग पूरी तरह से तला हुआ है। कुछ मदद की सराहना की जाएगी।

धन्यवाद

+0

हो सकता है कि इस में मदद मिलेगी http://stackoverflow.com/questions/4958081/find-all-elements-with-a-certain-attribute-in-jquery – AliBZ

उत्तर

13

complete संपत्ति के साथ छवियों को खोजने के लिए अपने तत्काल सवाल का जवाब करने के लिए, तो आप इस इस्तेमाल कर सकते हैं:

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); 
    } 
} 

के बाद इस कोड चलता है, completeImages<img> तत्व की एक सरणी है complete संपत्ति true के रूप में।

jQuery के साथ

, आप इस्तेमाल कर सकते हैं:

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

इस मामले में, images, एक jQuery <img> तत्वों है कि true रूप complete संपत्ति की वस्तु (सरणी जैसी वस्तु) है।

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

और पता लगाने के लिए जो/कितने लोड किए गए हैं:

इसके बजाय complete संपत्ति की जाँच की

, एक और विकल्प है, जब वे लोड और उनके लिए विशेष डेटा सेट का पता लगाने के load घटना उपयोग करने के लिए है

imag के साथ इस्तेमाल किया जब लोड घटना की "चेतावनियां के लिए नीचे स्क्रॉल - http://api.jquery.com/load-event/:
$("#div_id").find("img").filter(function() { 
    return $(this).data("image-complete"); 
}); 

ध्यान दें कि load घटना पूरी तरह से समर्थित नहीं है/<img> रों साथ विश्वसनीय एसएस "खंड।

+2

धन्यवाद, यहां बहुत उपयोगी जानकारी है। '.load' जो मैंने मूल रूप से कोशिश की थी, लेकिन मुद्दों में भाग गया क्योंकि छवियों को गतिशील रूप से जोड़ा जा रहा है, इसलिए कैश किए गए किसी भी चित्र को '.load' के साथ पंजीकृत नहीं किया जाएगा। मैं '.filter' विधि का उपयोग कर समाप्त हुआ और यह बहुत अच्छा काम करता है। ऐसा लगता है जितना मुझे पता है कि मुझे और जानने की जरूरत है ... अगर यह समझ में आता है। –

2

तुम भी वर्गों का उपयोग एक ही व्यवहार को पुन सकता है -

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

अब जब भी आप को देखने के लिए कितने छवियों लोड हो जाने पर आप सिर्फ इस का भी उपयोग करेंगे चाहते हैं -

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

क्या यह केवल उन छवियों के साथ काम नहीं करेगा जो प्रारंभ में लोड किए गए हैं? जिन छवियों के साथ मैं काम कर रहा हूं वे गतिशील रूप से जोड़े गए हैं, इसलिए मैं '.load' की बजाय 'पूर्ण' संपत्ति का उपयोग कर रहा हूं। जब मैंने '.load' चाची छवियों का उपयोग करने का प्रयास किया तो प्रभावित/गिना नहीं गया था –

संबंधित मुद्दे