2010-05-18 11 views
6

क्यों following code में .height() 100 से कम 95 देता है, जबकि .width() अपेक्षा के अनुसार 200 लौटाता है? मैं फ़ायरफ़ॉक्स 3.6.3 के साथ काम करता हूं।jQuery। विड्थ() और .height() अजीब व्यवहार

HTML:

<table><tr> 
    <td id="my"></td> 
</tr></table> 
<div id="log"></div> 

सीएसएस:

#my { 
    border: 5px solid red; 
} 

जे एस:

$("#my").width(200).height(100); 
$("#log").append("Width = " + $("#my").width() + "<br />"); 
$("#log").append("Height = " + $("#my").height()); 

मैं .outerWidth() और .outerHeight() और भी .innerWidth() और कोशिश की। आंतरिक हाइट(), लेकिन उनमें से कोई भी अपेक्षित परिणाम देता है: code example

लेकिन, अगर मैं position: absolute सेट करता हूं तो यह much better दिखता है!

क्या कोई इस व्यवहार को समझा सकता है?

+0

Google क्रोम 4.1.249.1064 पर, मुझे ऊंचाई 95 और चौड़ाई 195 मिलती है। – hwiechers

+1

यह या तो ब्राउज़र समस्या है, या अन्य सीएसएस मौजूद होने के साथ कोई समस्या है। Google क्रोम 6.0.401.1 देव में, मुझे अपेक्षित परिणाम मिल गए। http://jsbin.com/omefu/2 – Matchu

+0

@ मिशा: असंगतता तालिका/टीडी के डिफ़ॉल्ट पैडिंग के कारण होती है। नीचे अद्यतन उत्तर देखें :)। –

उत्तर

7

की गणना करते समय jQuery द्वारा उपेक्षित रहे ऊंचाई और चौड़ाई की गणना के लिए कुछ jQuery तरीके हैं। jQuery डॉक्स से outerHeight()

अंश उपयोग करके देखें: http://api.jquery.com/outerHeight/

.outerHeight([ includeMargin ])

includeMargin - तत्व की गणना में मार्जिन शामिल करने के लिए है कि क्या यह दर्शाता है एक बूलियन।

http://api.jquery.com/innerHeight/

.innerHeight()

इस विधि ऊपर और नीचे गद्दी, पिक्सेल में सहित तत्व, की ऊंचाई देता है।

संपादित करें: स्थापना ऊंचाई() टीडी-तत्व पर डिफ़ॉल्ट गद्दी (1px) शामिल करने के लिए निकाला जाता है। की गणना आयाम वास्तव में रहे हैं ...

alt text http://files.wordofjohn.com/with_border.png

आप इन मुद्दों से बचने के 0px करने के लिए डिफ़ॉल्ट गद्दी स्थापित करना चाहिए।

table td { 
    padding: 0; 
} 

संपादित करें 2: यह एक ब्राउज़र मुद्दा (शायद एक तालिका के आयामों की गणना के प्रतिपादन इंजन की विधि से संबंधित कुछ) प्रतीत होता है। इस व्यवहार के प्रभाव ब्रोवर में अलग-अलग होंगे। आपको divs का उपयोग करके वैकल्पिक, टेबल-कम, समाधान मिलना चाहिए।

+0

बाहरी और आंतरिक कार्यों में मदद नहीं करता है। अद्यतन प्रश्न देखें। –

+0

मैंने 'td' के पैडिंग = 0 को सेट करने का प्रयास किया, लेकिन इससे मदद नहीं मिली। अद्यतन प्रश्न देखें। –

+0

यह वही है जो मैंने करने का फैसला किया: 'div's का उपयोग करके एक और समाधान खोजने के लिए :) –

0

मुझे इस बारे में निश्चित नहीं है .. मुझे यह भी अजीब लगता है .. यह मेरा अनुमान है।

सीमा वास्तविक ऊंचाई में खाती है और ऊंचाई

+0

आधुनिक बॉक्स मॉडल ऐसा नहीं करता है। शायद यह एक आईई 6 मुद्दा है ... लेकिन अगर ऐसा है तो 1 9 0 और 9 0 होना चाहिए? – Matchu

+0

हाँ आपके पास एक वैध बिंदु – ZX12R

+0

है सवाल यह है कि चौड़ाई और ऊंचाई अलग-अलग व्यवहार क्यों करती है। मैं दोनों को सीमा/पैडिंग/मार्जिन शामिल करने या शामिल करने की अपेक्षा नहीं करता। –

1

मैं वास्तव में जॉन से बेहतर इस व्यवहार को स्पष्ट नहीं कर सकता, लेकिन चूंकि यह ब्राउज़र असंगतता अभी भी आसपास है (कम से कम उन लोगों के लिए जो jQuery संस्करण को अपग्रेड नहीं कर सकते हैं) मैंने सोचा कि मैं इस समस्या के लिए एक समाधान साझा करूंगा।

एचटीएमएल डोम गुण clientHeight और clientWidth का उपयोग अधिकांश ब्राउज़र से अधिक सुसंगत हो रहा है।

$("#my").width(200).height(100); 
$("#log").append("Width = " + $("#my").attr("clientWidth") + "<br />"); 
$("#log").append("Height = " + $("#my").attr("clientHeight")); 

यह भी संभव है कि इन offsetHeight उपयोग कर सकते हैं कि/offsetWidth बजाय, तुम क्या जरूरत पर निर्भर करता है।

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