2012-11-17 6 views
26

पैडिंग और सीमाओं के बिना, आप तत्व की आंतरिक ऊंचाई कैसे प्राप्त करते हैं?तत्व की आंतरिक ऊंचाई प्राप्त करना

कोई jQuery, सिर्फ शुद्ध जे एस, और एक क्रॉस ब्राउज़र समाधान (IE7 शामिल)

enter image description here

+1

क्यों 'सीएसएस में सीमा-box' का उपयोग नहीं है? इस तरह आपको इन चीजों के बारे में चिंता करने की ज़रूरत नहीं है ... फिर आप 'ऑफ़सेट हाइट' का उपयोग कर सकते हैं जो मार्जिन के बिना उचित ऊंचाई वापस कर देगा। – elclanrs

+0

यह एक प्लगइन के लिए एक बहुत ही विशिष्ट सवाल है जो मेरे पास कोई सीएसएस नियंत्रण नहीं है, मुझे बस – vsync

+0

के साथ काम करना है, इसलिए मुझे लगता है कि आप अभी भी 'बॉक्स-साइजिंग: सीमा-बॉक्स' सेट कर सकते हैं, यह आपको कुछ समय और सिरदर्द बचाएगा। – elclanrs

उत्तर

30
var style = window.getComputedStyle(document.getElementById("Example"), null); 
style.getPropertyValue("height"); 

ऊपर संस्करण आधुनिक ब्राउज़रों में काम करेंगे। आईई ब्राउज़र के लिए कृपया currentStyle देखें। टिप्पणियों से

+5

आपका मतलब है: 'parseInt (style.getPropertyValue (' height ')); ' – vsync

+4

सीएसएस में कोई ऊंचाई नहीं होने पर इंटरनेट एक्सप्लोरर" ऑटो "वापस कर देगा http://jsfiddle.net/Kxsvx/ तो आपके पास नहीं है इसकी ऊंचाई! – Mic

+0

@Mic कौन सा इंटरनेट एक्सप्लोरर? – Fresheyeball

0

संपादित करें:

http://jsfiddle.net/hTGCE/1/ (थोड़ा अधिक कोड तो उम्मीद)

इंटरनेट आप इस तरह के कार्यों को खोजने में

:

function getRectangle(obj) { 

      var r = { top: 0, left: 0, width: 0, height: 0 }; 

      if(!obj) 
      return r; 

      else if(typeof obj == "string") 
      obj = document.getElementById(obj); 


      if(typeof obj != "object") 
      return r; 

      if(typeof obj.offsetTop != "undefined") { 

      r.height = parseInt(obj.offsetHeight); 
      r.width = parseInt(obj.offsetWidth); 
      r.left = r.top = 0; 

      while(obj && obj.tagName != "BODY") { 

       r.top += parseInt(obj.offsetTop); 
       r.left += parseInt(obj.offsetLeft); 

       obj = obj.offsetParent; 
      } 
      } 
      return r; 
     } 

अगर आप गद्दी घटाना चाहते हैं/सीमा -विड्थ सीएसएस फ़ाइल में सेट है और शैली विशेषता में गतिशील नहीं है:

var elem = document.getElementById(id); 
    var borderWidth = 0; 

      try { 
      borderWidth = getComputedStyle(elem).getPropertyValue('border-top-width'); 

      } catch(e) { 

      borderWidth = elem.currentStyle.borderWidth; 
      } 
    borderWidth = parseInt(borderWidth.replace("px", ""), 10); 

और पैडिंग के साथ ही। तो आप इसकी गणना करते हैं।

+1

आप सभी प्रकार के कचरा कोड पा सकते हैं। मैं इस रहस्य के लिए अंतिम जवाब चाहता हूं, न कि फूला हुआ, धीमा कोड .. लेकिन उत्तर के लिए धन्यवाद :) – vsync

+0

यदि आपके पास एक तत्व के लिए एक सीएसएस विशेषता "ऊंचाई" के बिना गतिशील ऊंचाई है तो "getComputedStyle" के साथ विधि नहीं होगी काम। या मैं गलत हूँ? – Mic

+0

यह काम करता है, बस इसे – vsync

0

मैं एक ही समस्या थी और पता चला कि वहाँ कोई देशी पार plattform समाधान है, लेकिन समाधान आसान हालांकि

var actual_h = element.offsetHeight; 

      if(parseInt(element.style.paddingTop.replace('px','')) > 0){ 
       actual_h=actual_h - parseInt(element.style.paddingTop.replace('px','')); 

      } 
      if(parseInt(element.style.paddingBottom.replace('px','')) > 0){ 
       actual_h=actual_h - parseInt(element.style.paddingBottom.replace('px','')); 

      } 
+1

सलाह दीजिये कि, एमडीएन [राज्य] (https: //developer.mozilla के रूप में। संगठन/एन-यूएस/डॉक्स/वेब/एपीआई/एचटीएमलेमेंट/स्टाइल # हो रही_स्टाइल_इन्फोर्मेशन), "'स्टाइल' प्रॉपर्टी सामान्य रूप से तत्व की शैली के बारे में सीखने के लिए उपयोगी नहीं है, क्योंकि यह केवल तत्व की इनलाइन में सेट सीएसएस घोषणाओं का प्रतिनिधित्व करती है। शैली 'विशेषता [...] "। – Spooky

+0

बॉक्स-साइजिंग आई 7 में काम नहीं करता है – Chandrakant