2010-09-21 19 views
6

के अंदर छवि की ऊंचाई प्राप्त करें, मैं एक छिपी हुई डिवी-कंटेनर के अंदर एक छवि की ऊंचाई/चौड़ाई प्राप्त करना चाहता हूं, लेकिन .height() और .width() दोनों रिटर्न 0 (अपेक्षित) हैं।एक छिपे हुए div


$('body').append('<div id="init"><img id="myimg" src="someimage.png" /></div>'); 
$('#init').hide(); 
$('#myimg').height(); // == 0 
$('#myimg').width(); // == 0 

मैं छवि की सही ऊंचाई/चौड़ाई कैसे प्राप्त कर सकता हूं? कोई नहीं: मैं, Biggie

+2

आप टिप्पणी पढ़ने यदि आप @Yi जियांग का कहना है कि अपने ही जवाब गलत है देखेंगे। – egrunin

+0

क्या आप रॉबर्ट के लिए अपने स्वीकृत उत्तर को बदलने के लिए बहुत दयालु होंगे (हाँ, आप ऐसा कर सकते हैं), क्योंकि वह सही है और मैं नहीं हूं। धन्यवाद। –

उत्तर

9

इसकी क्योंकि छवि अभी तक लोड नहीं है .....

$('body').append('<div id="init"><img id="myimg" src="something.png" /></div>'); 
$('#init').hide(); 

$('#myimg').bind("load",function(){ 
    alert(this.height) //works 
})​ 

यहाँ एक परीक्षण: http://jsfiddle.net/WMpSy/

+0

यह काम करता है लेकिन स्पष्टीकरण गलत है। बेशक, छवि को पहले लोड किया जाना चाहिए, लेकिन छवि लोड होने के बाद भी अगर छवि एक छिपे हुए div के अंदर है, तो jQuery ऊंचाई() और चौड़ाई() विधियां अभी भी वापस आ जाएंगी। यह समाधान काम करता है क्योंकि यह जावास्क्रिप्ट का उपयोग करता है तत्व, jQuery तत्व नहीं - यानी यह .height $ (इस) के विरोध में .height()। अधिक जानकारी के लिए नीचे शमूएल प्रतिक्रिया देखें। –

1

:-)

सादर कुछ निर्णय लेने के क्रम ऊंचाई की गणना या div बजाय प्रदर्शन का उपयोग कर के बंद स्क्रीन को छिपाने के लिए में div अस्थायी रूप से दिखाई दे और इसकी आवश्यकता है। मैंने पहले दृष्टिकोण का उपयोग किया है, और यह पर्याप्त तेज़ पाया है कि आप कभी तत्व नहीं देखेंगे।

+1

हाँ, और यहां तक ​​कि यदि यह एक पूर्ण स्थिति की तरह कुछ दिखाने के लिए पर्याप्त धीमा है और एक -1000 मार्जिन को उस अवधि के दौरान छुपाया जाना चाहिए जो यह दिखाई दे रहा है। –

4

यदि आप सही ऊंचाई और चौड़ाई चाहते हैं तो आप इसे छुपा नहीं सकते हैं, लेकिन आप इसे स्थानांतरित कर सकते हैं जैसे कि यह स्क्रीन से बाहर हो जाएगा, और इस प्रकार प्रभावी रूप से छुपाया जाएगा। इस प्रयास करें:

var hiddenDiv = $('<div id="init"><img id="myimg" src="someimage.png" /></div>').appendTo('body').css({ 
    'position': 'absolute', 
    'top': -9999 
}); 

var img = hiddenDiv.children('img'); 
img.height(); 
img.width(); 
+0

जैसा कि आपने मेरी पोस्ट पर इंगित किया है, यह एक कैश की गई छवि लोड कर रहा है, ओपी को दोनों उत्तरों की समीक्षा करनी चाहिए। – RobertPitt

+0

@ रॉबर्ट मैंने परीक्षण किया है - 'डिस्प्ले: किसी भी' तत्वों की ऊंचाई नहीं है - '$ ('# answer-3761104') में टाइप करना। छुपाएं() ऊंचाई() 'सही ऊंचाई देता है - इसलिए यह उत्तर है पूरी तरह गलत –

+0

मैंने सोचा कि यह 'छवि लोड इवेंट' पर नीचे आ जाएगा। – RobertPitt

-7

ऐसा लगता है कि एक छवि की ऊंचाई & चौड़ाई की गणना करने की जरूरत है लग रहा है। यदि हां, तो आप इसके बारे में बहुत कठिन सोच रहे हैं।

+1

-1 जब तक आप समझाते हैं * क्यों *, या उसके विकल्प क्या हो सकते हैं, यह उपयोगी नहीं है। – egrunin

+4

* आप * इसके बारे में सोच रहे हैं। – Stephen

0

आप खोज() का उपयोग करने के लिए है

$('body').find('#myimg').width(); 

या

$('body').find('#myimg').attr("width"); 

क्योंकि आप इसे संलग्न है के बाद डोम

+5

गलत, हमें एक आईडी कब प्राप्त करने की आवश्यकता होगी? – RobertPitt

+0

मुझे एक ही समस्या थी, और मैंने इसे() का उपयोग कर तय कर दिया है। –

0

लोड किया गया था मैं तुम्हारे साथ ऐसा कर सकते हैं यकीन नहीं है jQuery (या बिल्कुल जावास्क्रिप्ट)। मुझे लोडिंग/छुपा img पर गलत रिपोर्ट की गई ऊंचाई और चौड़ाई के साथ एक ही समस्या थी। हालांकि, आप, छवि भार का इंतजार यह सही ऊंचाई और चौड़ाई है और फिर माता-पिता को छिपाने ... की तरह तो कर सकते हैं:

var height, width; 

$('#myimg').load(function() { 
    height = $(this).height(); 
    width = $(this).width(); 
    $('#init').hide(); 
} 
21

मैं सिर्फ इस बात के लिए समाधान भर में भाग गया, तो आप क्या jQuery पर भरोसा करने के बजाय आप के लिए यह करने के लिए है। इसके बजाय, जावास्क्रिप्ट तत्व हो और तत्व के ही बंद ऊंचाई प्राप्त इस प्रकार है:

var img = hiddenDiv.children('img'); 

var imgHeight = img.get(0).height; 
var imgWidth = img.get(0).width; 

jQuery विधि get(0) हमें पर्याप्त अंतर्निहित डोम तत्व पर मिलता है और दिलचस्प बात करने के लिए अनुमति देता है, डोम तत्व आयाम नहीं है परिवर्तन।

प्रदर्शन नोट्स के लिए हालांकि, एक नोट हालांकि, यदि आप इसे और अधिक उपयोग करने की योजना बना रहे हैं तो आप img.get(0) को कैश करना चाहेंगे।

jQuery get method documentation

+2

धन्यवाद। यह एकमात्र उत्तर है जो मेरे लिए काम करता है क्योंकि लोड होने के बाद मैं जिन छवियों को प्राप्त करने की कोशिश कर रहा था वे एक छिपे हुए div में थे। – Jerry

+1

"दिलचस्प है" सही है! मान लें कि 'img' एक लक्षित तत्व का प्रतिनिधित्व करता है ... सुनिश्चित नहीं है कि क्यों img.height और img.get (0) .height अलग-अलग परिणाम लौटाते हैं, लेकिन मुझे खुशी है कि .get() संस्करण मौजूद है! धन्यवाद सैमुअल –

+3

यह स्वीकार्य उत्तर होना चाहिए। छवि को जोड़ना और फिर छिपाना यह काम कर सकता है, लेकिन यह इस विधि के रूप में लगभग उतना ही साफ नहीं है। – squarecandy

1

मैं एक ऐसी ही समस्या थी। बात यह है कि यदि किसी छवि या छवि वाले किसी छवि में शैली = "प्रदर्शन: कोई नहीं" है तो इसकी सीएसएस ऊंचाई = 0 है। मैंने पाया कि ऊंचाई() और चौड़ाई() कार्यों ने गलत मान दिए, उदाहरण के लिए 0! मेरे लिए समाधान यह सुनिश्चित करना था कि छवियों में उनके गुण सेट हों, भले ही वे छुपाए गए हों, मान अभी भी सुलभ हैं।तो उपयोग करें:

$ ('# testImg')। Attr ('ऊंचाई') और $ ('# testImg')। छवि की ऊंचाई और चौड़ाई प्राप्त करने के लिए attr ('width')।

0

हाँ अपने क्योंकि छवि अभी तक लोड नहीं है और यह मेरा समाधान है:

$('<img src="My Image URL" />').appendTo('body').css({ 
       'position': 'absolute', 
       'top': -1 
      }).load(function() { 
       console.log('Image width: ' + $(this).width()); 
       console.log('Image height: ' + $(this).height()); 
       $(this).remove(); 
      }); 
संबंधित मुद्दे