आप एक तत्व की प्रदान की गई ऊंचाई कैसे प्राप्त करते हैं?


405

आप एक तत्व की प्रदान की गई ऊंचाई कैसे प्राप्त करते हैं?

मान लीजिए कि आपके पास <div>कुछ सामग्री है जिसमें कुछ सामग्री है। यह सामग्री अंदर की ऊँचाई को बढ़ाती जा रही है <div>। जब आप स्पष्ट रूप से ऊँचाई सेट नहीं करते हैं, तो आपको "प्रदान की गई" ऊँचाई कैसे मिलती है। जाहिर है, मैंने कोशिश की:

var h = document.getElementById('someDiv').style.height;

क्या ऐसा करने के लिए कोई ट्रिक है? मैं jQuery का उपयोग कर रहा हूँ अगर वह मदद करता है।


इस उत्तर को देखें stackoverflow.com/questions/19581307/…
KarSho

जवाबों:


183

यह सिर्फ होना चाहिए

$('#someDiv').height();

jQuery के साथ। यह संख्या के रूप में लिपटे सेट में पहले आइटम की ऊंचाई को पुनः प्राप्त करता है।

उपयोग करने की कोशिश कर रहा है

.style.height

केवल तभी काम करता है जब आपने पहली जगह में संपत्ति निर्धारित की हो। बहुत उपयोगी नहीं है!


1
एक शब्द - कमाल! सभी की भागीदारी के लिए धन्यवाद। इस धागे पर बहुत सारी अच्छी जानकारी। यह मुझे CSS का उपयोग करते हुए पृष्ठों को केंद्र में रखने की अनुमति देगा लेकिन CSS Hackville में शामिल हुए बिना "कंटेनर" div की समग्र ऊंचाई बनाने के लिए jQuery का उपयोग करें। एक बार फिर धन्यवाद।
बड्डीज्यो

3
यहां तक ​​कि अगर आप jQuery या कैंट का उपयोग नहीं कर रहे हैं या मैं नहीं चाहता कि मैं किसी को भी इसे लागू करने का सुझाव दूं, तो केवल ऑफसेटहाइट का उपयोग करके इसे आगे बढ़ाएं और jQuery स्रोत डाउनलोड करें और उनके उपयोग किए गए कोड को खोजने के लिए "ऊंचाई" की खोज करें। बहुत सारा पागल सामान वहाँ चल रहा है!
साइमन_वेर

1
@matejkramny - यह सवाल और जवाब 5 साल पहले खत्म हो गया था । ओपी पहले से ही अपनी साइट पर jQuery का उपयोग कर रहा था, इसलिए उसी / उसी तरह के तर्क को फिर से लागू करने के बजाय, वह एक लाइन jQuery फ़ंक्शन का उपयोग क्यों नहीं करता है जो पहले से ही करता है? मैं सहमत हूँ कि jQuery बहुत सारी चीजों के लिए ओवरकिल है और मैं वैनिला जेएस से डरता नहीं हूं, लेकिन जब एक पुस्तकालय में एक फ़ंक्शन होता है जो वास्तव में आपकी आवश्यकता है, तो यह मूर्खतापूर्ण लगता है कि इसका उपयोग न करें, विशेष रूप से कारणों से "Not Invented Here"
रस कैम

3
@matejkramny जब सवाल पूछ रहा है तो ओपी का इरादा तत्व की प्रदान की गई ऊंचाई प्राप्त करना था, यह समझने के लिए नहीं कि डोम और पर्दे के पीछे क्या हो रहा है; अगर यह उनका इरादा था, तो उन्होंने गलत सवाल पूछा। मैं मानता हूं कि लोगों को उन पुस्तकालयों और रूपरेखाओं को समझने के लिए इच्छुक होना चाहिए जो वे उपयोग करते हैं, ज्ञान शक्ति है और वह सब है, लेकिन कभी-कभी कोई एक विशिष्ट प्रश्न का उत्तर चाहता है। वास्तव में, उपरोक्त टिप्पणियां पहले से ही jQuery कोड के माध्यम से देखने का सुझाव देती हैं कि यह समझने के लिए कि पर्दे के पीछे क्या चल रहा है।
रस कैम

21
ओपी के लिए, jQuery का उपयोग करना एक मान्य उत्तर है। तब से इसे देखने वाले बाकी दुनिया के लिए, गैर- jQuery का उत्तर सबसे अच्छा है। शायद एसओ को उस वास्तविकता के अनुकूल होने की आवश्यकता है, शायद उच्चतम मतदान के जवाबों को किसी तरह स्वीकार किया जाना चाहिए।
दिमित्री

1219

इनमें से एक आज़माएँ:

var h = document.getElementById('someDiv').clientHeight;
var h = document.getElementById('someDiv').offsetHeight;
var h = document.getElementById('someDiv').scrollHeight;

clientHeight ऊंचाई और ऊर्ध्वाधर गद्दी शामिल हैं।

offsetHeight ऊंचाई, ऊर्ध्वाधर गद्दी और ऊर्ध्वाधर सीमाएं शामिल हैं।

scrollHeight सम्‍मिलित दस्‍तावेज़ की ऊँचाई (स्क्रॉलिंग के मामले में ऊँचाई से अधिक होगी), ऊर्ध्वाधर पैडिंग और वर्टिकल बॉर्डर शामिल हैं।


3
धन्यवाद, मैं इस संपत्ति के बारे में नहीं जानता था। यह IE8 + संगत भी है।
गीत

मैं क्लाइंटहाइट के अर्थ से हैरान हूं। मेरे पास एक दिव्य तत्व है जिसमें पी तत्वों का एक गुच्छा है और सामग्री नीचे की ओर ब्राउज़र के देखने योग्य क्षेत्र से बहुत आगे जाती है। और मुझे उम्मीद थी कि क्लाइंट हाइट पूरी लंबाई देने के लिए प्रदान की गई ऊंचाई, और स्क्रॉलहाइट देगा। लेकिन वे लगभग समान हैं (केवल मार्जिन, पैडिंग आदि के आधार पर भिन्न)।
बहती

10
@bahti जब तक कि इसकी खुद की एक सीमित ऊंचाई और एक अतिप्रवाह नहीं है: छिपी या अतिप्रवाह के कुछ रूप: स्क्रॉल, तत्व का विस्तार होगा (चाहे वह आपके विचार में हो या नहीं) सभी सामग्री को दिखाने के लिए और स्क्रॉल और क्लाइंटहाइट समान होंगे।
उलद कासच

4
महान उत्तर, लेकिन तार्किक रूप से, किसी तत्व की ऊंचाई को प्रभावित करने वाली सीमाएं ऊपर और नीचे की सीमाएं हैं, जो क्षैतिज हैं। यह उत्तर उन्हें "ऊर्ध्वाधर सीमाओं" के रूप में संदर्भित करता है। बस मैंने सोचा कि मैं अपने 2 सेंट
कहलान क्रुममे

1
जो मुझे पता है, उसमें .clientWidth/.clientHeight स्क्रॉल चौड़ाई शामिल नहीं है यदि स्क्रॉल दिखाया गया है। यदि आप स्क्रॉल चौड़ाई को शामिल करना चाहते हैं, तो element.getBoundingClientRect().width इसके बजाय उपयोग कर सकते हैं
दिमित्री

151

NON JQUERY क्योंकि elem.style.heightइन उत्तरों के शीर्ष में उपयोग करने वाले लिंक का एक गुच्छा था ...

INNER HEIGHT:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight

document.getElementById(id_attribute_value).clientHeight;

OUTER HEIGHT:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight

document.getElementById(id_attribute_value).offsetHeight; 

या मेरे पसंदीदा संदर्भों में से एक: http://youmightnotneedjquery.com/


49

आप .outerHeight()इस उद्देश्य के लिए उपयोग कर सकते हैं ।

यह आपको तत्व की पूरी प्रदान की गई ऊंचाई देगा। इसके अलावा, आपको किसी भी css-heightतत्व को सेट करने की आवश्यकता नहीं है । एहतियात के लिए आप इसकी ऊंचाई ऑटो रख सकते हैं ताकि इसे सामग्री की ऊंचाई के अनुसार प्रदान किया जा सके।

//if you need height of div excluding margin/padding/border
$('#someDiv').height();

//if you need height of div with padding but without border + margin
$('#someDiv').innerHeight();

// if you need height of div including padding and border
$('#someDiv').outerHeight();

//and at last for including border + margin + padding, can use
$('#someDiv').outerHeight(true);

इन फ़ंक्शन के स्पष्ट दृश्य के लिए आप jQuery की साइट या a के लिए जा सकते हैं यहां विस्तृत पोस्ट

इससे / / के बीच अंतर स्पष्ट होगा.height()innerHeight()outerHeight()


1
धन्यवाद। फ्लोट्स के साथ काम करने में मुझे ऊंचाई ऑटो के साथ बहुत परेशानी थी लेकिन तब अनुभवहीन था। मैं आम तौर पर कुछ जटिल लेआउट स्क्रिप्ट को छोड़कर ऊँचाई सेट नहीं कर रहा हूं, जहां मैं शुरू में क्षेत्र को साफ़ करता हूं लेकिन इसे प्रत्येक ब्लॉक (Div) के लिए समान होने के लिए सेट करता हूं जो उसी शीर्ष के साथ समाप्त होता है। यहां तक ​​कि ब्लॉक के बीच एक पिक्सेल अंतर लेआउट को स्क्रू कर सकता है जब विंडोज़ का आकार बदल सकता है।
DHorse

1
BTW, मुझे लगता है कि ऑफसेट में कुछ ब्राउज़र संस्करण पर निर्भर मार्जिन का उपयोग करता है जो इसे समाप्त करता है।
DHorse

2
सवाल jQuery के लिए कॉल नहीं करता है। ओह।
dthree

1
@dthree मुझे लगता है कि उसने स्पष्ट रूप से उल्लेख किया है कि वह jQuery का उपयोग कर रहा है। (टैग में भी शामिल है) :)
खुला और मुफ्त

44

मैं एक तत्व की ऊंचाई प्राप्त करने के लिए इसका उपयोग करता हूं (रिटर्न फ्लोट) :

document.getElementById('someDiv').getBoundingClientRect().height

जब आप वर्चुअल DOM का उपयोग करते हैं तो यह भी काम करता है । मैं इसे इस तरह से उपयोग करता हूं:

this.$refs['some-ref'].getBoundingClientRect().height

1
getBoundingClientRect ()। ऊँचाई एक फ़्लोटिंग-पॉइंट नंबर (जबकि अन्य पूर्णांक लौटाते हैं), अच्छा :)
Ari


14

निश्चित रूप से उपयोग करें

$('#someDiv').height()   // to read it

या

$('#someDiv').height(newHeight)  // to set it

मैं इसे एक अतिरिक्त उत्तर के रूप में पोस्ट कर रहा हूं, क्योंकि कुछ महत्वपूर्ण बातें जो मैंने अभी-अभी सीखी हैं।

मैं लगभग ऑफसेट की जगह अब केवल ऑफसेट का उपयोग कर गिर गया। यह हुआ था :

  • मैंने डिबगर का उपयोग करने की अच्छी पुरानी चाल का उपयोग करके यह देखा कि मेरे तत्व में क्या गुण हैं
  • मैंने देखा कि जिस मूल्य की मुझे उम्मीद थी, उसके आसपास एक मूल्य है
  • यह ऑफसेट था - इसलिए मैंने इसका इस्तेमाल किया।
  • तब मुझे एहसास हुआ कि यह एक छिपे हुए DIV के साथ काम नहीं करता
  • मैंने मैक्सहाइट की गणना करने के बाद छिपने की कोशिश की लेकिन यह अनाड़ी लग रहा था - गड़बड़ हो गया।
  • मैंने एक खोज की - jQuery.height () की खोज की और उसका उपयोग किया
  • छिपे हुए तत्वों पर भी ऊंचाई () काम करती है
  • सिर्फ मनोरंजन के लिए मैंने ऊंचाई / चौड़ाई के jQuery कार्यान्वयन की जाँच की

यहाँ इसका केवल एक हिस्सा है:

Math.max(
Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]),
Math.max(document.body["offset" + name], document.documentElement["offset" + name])
) 

हाँ, यह दोनों स्क्रॉल और ऑफसेट पर दिखता है। यदि यह विफल रहता है तो यह आगे भी दिखता है, खाते के ब्राउज़र और सीएसएस संगतता मुद्दों को ध्यान में रखते हुए। दूसरे शब्दों में STUFF I DONT CARE ABOUT - या करना चाहते हैं।

लेकिन मुझे नहीं करना है। धन्यवाद jQuery!

कहानी की नैतिकता: अगर jQuery के पास किसी अच्छे कारण के लिए एक विधि है, तो संभवत: संगति से संबंधित है।

यदि आपने हाल ही में मेरे द्वारा देखे गए तरीकों के jQuery सूची के माध्यम से नहीं पढ़ा है ।


प्रश्न स्तर पर अपनी अन्य टिप्पणी देखी। मैं jQuery पर बेच रहा हूँ। थोड़ी देर के लिए हैं। लेकिन इस सौदे को सील कर दिया। मैं इस तथ्य से प्यार करता हूं कि यह सरल बात मेरे लिए 100 लेआउट मुद्दों को हल करने जा रही है (ज्यादातर इंट्रानेट साइटों पर जहां मुझे पता है कि जावास्क्रिप्ट चल रहा है)।
बडीजोई

13
document.querySelector('.project_list_div').offsetHeight;

4
अपने समाधान में स्पष्टीकरण जोड़ें
फ्रीलांसर

तो offsetHeight
ऋत्विक

6
यह गुण किसी पूर्णांक के मान को पूर्ण करेगा । यदि आपको एक फ्लोट मूल्य की आवश्यकता है , तो उपयोग करेंelem.getBoundingClientRect().height
पेनी लियू

12

मैंने एक साधारण कोड बनाया है जिसमें JQuery की भी आवश्यकता नहीं है और शायद कुछ लोगों की मदद करने वाला है। इसे लोड करने के बाद 'ID1' की कुल ऊंचाई मिलती है और इसका उपयोग 'ID2' पर किया जाता है

function anyName(){
    var varname=document.getElementById('ID1').offsetHeight;
    document.getElementById('ID2').style.height=varname+'px';
}

फिर बस शरीर को इसे लोड करने के लिए सेट करें

<body onload='anyName()'>

यह उपयोगी है और मैं अधिक जटिल कोड में कुछ समान काम करता हूं।
DHorse

10

हम हम तत्व ज्यामिति प्राप्त कर सकते हैं ...

var geometry;
geometry={};
var element=document.getElementById(#ibims);
var rect = element.getBoundingClientRect();
this.geometry.top=rect.top;
this.geometry.right=rect.right;
this.geometry.bottom=rect.bottom;
this.geometry.left=rect.left;
this.geometry.height=this.geometry.bottom-this.geometry.top;
this.geometry.width=this.geometry.right-this.geometry.left;
console.log(this.geometry);

कैसे इस सादे जेएस के बारे में?


1
var geometry; geometry={};बस हो सकता हैvar geometry={};
मार्क Schultheiss

10

मुझे लगता है कि 2020 में ऐसा करने का सबसे अच्छा तरीका सादे जीएस का उपयोग करना है और getBoundingClientRect().height;

यहाँ एक उदाहरण है

let div = document.querySelector('div');
let divHeight = div.getBoundingClientRect().height;

console.log(`Div Height: ${divHeight}`);
<div>
  How high am I? 🥴
</div>

heightइस तरह से शीर्ष पर , हमारे पास अन्य सामानों के एक समूह तक पहुंच भी है div

let div = document.querySelector('div');
let divInfo = div.getBoundingClientRect();

console.log(divInfo);
<div>What else am I? 🥴</div>


8

तो क्या इसका जवाब है?

"यदि आपको कुछ गणना करने की आवश्यकता है, लेकिन इसे न दिखाएं, तत्व को visibility:hiddenऔर पर सेट करेंposition:absolute , इसे DOM ट्री में जोड़ें, ऑफसेटहाइट प्राप्त करें, और इसे हटा दें। (पिछली बार जब मैंने चेक किया था तो प्रोटोटाइप लाइब्रेरी लाइनों के पीछे करता है)।"

मैं कई तत्वों पर एक ही समस्या है। साइट पर उपयोग करने के लिए कोई jQuery या प्रोटोटाइप नहीं है, लेकिन अगर यह काम करता है तो मैं तकनीक को उधार लेने के पक्ष में हूं। कुछ चीजों के उदाहरण के रूप में, जो काम करने में विफल रहीं, उसके बाद क्या किया, मेरे पास निम्नलिखित कोड हैं:

// Layout Height Get
function fnElementHeightMaxGet(DoScroll, DoBase, elementPassed, elementHeightDefault)
{
    var DoOffset = true;
    if (!elementPassed) { return 0; }
    if (!elementPassed.style) { return 0; }
    var thisHeight = 0;
    var heightBase = parseInt(elementPassed.style.height);
    var heightOffset = parseInt(elementPassed.offsetHeight);
    var heightScroll = parseInt(elementPassed.scrollHeight);
    var heightClient = parseInt(elementPassed.clientHeight);
    var heightNode = 0;
    var heightRects = 0;
    //
    if (DoBase) {
        if (heightBase > thisHeight) { thisHeight = heightBase; }
    }
    if (DoOffset) {
        if (heightOffset > thisHeight) { thisHeight = heightOffset; }
    }
    if (DoScroll) {
        if (heightScroll > thisHeight) { thisHeight = heightScroll; }
    }
    //
    if (thisHeight == 0) { thisHeight = heightClient; }
    //
    if (thisHeight == 0) { 
        // Dom Add:
        // all else failed so use the protype approach...
        var elBodyTempContainer = document.getElementById('BodyTempContainer');
        elBodyTempContainer.appendChild(elementPassed);
        heightNode = elBodyTempContainer.childNodes[0].offsetHeight;
        elBodyTempContainer.removeChild(elementPassed);
        if (heightNode > thisHeight) { thisHeight = heightNode; }
        //
        // Bounding Rect:
        // Or this approach...
        var clientRects = elementPassed.getClientRects();
        heightRects = clientRects.height;
        if (heightRects > thisHeight) { thisHeight = heightRects; }
    }
    //
    // Default height not appropriate here
    // if (thisHeight == 0) { thisHeight = elementHeightDefault; }
    if (thisHeight > 3000) {
        // ERROR
        thisHeight = 3000;
    }
    return thisHeight;
}

जो मूल रूप से शून्य परिणाम प्राप्त करने के लिए कुछ भी और सब कुछ करने की कोशिश करता है। कोई प्रभाव नहीं के साथ ClientHeight। समस्या तत्वों के साथ मैं आमतौर पर बेस में NaN और ऑफसेट और स्क्रॉल हाइट्स में शून्य प्राप्त करता हूं। मैंने तब DOM समाधान जोड़ें और क्लाइंटरीज़ को देखने की कोशिश की कि क्या यह यहाँ काम करता है।

29 जून 2011, मैंने वास्तव में बेहतर परिणाम के साथ DOM और clientHeight दोनों को जोड़ने की कोशिश करने के लिए कोड को अपडेट किया।

1) क्लाइंटहाइट भी 0 था।

2) डोम ने वास्तव में मुझे एक ऊंचाई दी जो महान थी।

3) ClientRects डोम तकनीक के समान परिणाम देता है।

क्योंकि जोड़े गए तत्व प्रकृति में तरल होते हैं, जब उन्हें अन्यथा खाली DOM Temp तत्व में जोड़ा जाता है, तो वे उस कंटेनर की चौड़ाई के अनुसार प्रदान किए जाते हैं। यह अजीब हो जाता है, क्योंकि यह 30px से कम है जो अंततः समाप्त हो जाता है।

मैंने यह बताने के लिए कुछ स्नैपशॉट जोड़े कि ऊंचाई की गणना कैसे की जाती है। मेनू ब्लॉक सामान्य रूप से प्रदान किया गया मेनू ब्लॉक DOM Temp तत्व में जोड़ा गया

ऊँचाई के अंतर स्पष्ट हैं। मैं निश्चित रूप से पूर्ण स्थिति जोड़ सकता हूं और छिपा हुआ हूं लेकिन मुझे यकीन है कि कोई प्रभाव नहीं पड़ेगा। मुझे यकीन था कि यह काम नहीं करेगा!

(मैं आगे पीछे हटता हूँ) ऊँचाई निकलती है (रेंडर करती है) सही रेंडर की ऊँचाई से कम। यह मौजूदा माता-पिता से मेल खाने के लिए DOM टेंप तत्व की चौड़ाई निर्धारित करके संबोधित किया जा सकता है और सिद्धांत में काफी सटीक रूप से किया जा सकता है। मुझे यह भी नहीं पता है कि उन्हें हटाने और उनके मौजूदा स्थान में वापस जोड़ने के परिणामस्वरूप क्या होगा। जैसा कि वे एक आंतरिक HTML तकनीक के माध्यम से पहुंचे, मैं इस अलग दृष्टिकोण का उपयोग करना चाहूंगा।

* कैसे * इनमें से कोई भी आवश्यक नहीं था। वास्तव में यह विज्ञापित के रूप में काम किया और सही ऊंचाई लौटा दिया !!!

जब मैं मेनू को फिर से आश्चर्यजनक रूप से दिखाई देने में सक्षम था, तो DOM ने पृष्ठ (279px) के शीर्ष पर द्रव लेआउट में सही ऊंचाई वापस कर दी थी। उपरोक्त कोड भी getClientRects का उपयोग करता है जो 280px वापस आते हैं।

यह निम्नलिखित स्नैपशॉट में चित्रित किया गया है (काम करने के बाद क्रोम से लिया गया है)।
यहां छवि विवरण दर्ज करें

अब मुझे पता नहीं है कि प्रोटोटाइप चाल क्यों काम करती है, लेकिन ऐसा लगता है। वैकल्पिक रूप से, getClientRects भी काम करता है।

मुझे संदेह है कि इन विशेष तत्वों के साथ इस सभी परेशानी का कारण appendChild के बजाय इनर HTML का उपयोग था, लेकिन इस बिंदु पर शुद्ध अटकलें हैं।


6

offsetHeight, आमतौर पर।

यदि आपको कुछ गणना करने की आवश्यकता है, लेकिन इसे न दिखाएं, तत्व को सेट करें visibility:hiddenऔर position:absolute, इसे DOM ट्री में जोड़ें, इसे प्राप्त करें offsetHeight, और इसे हटा दें। (यही कि प्रोटोटाइप लाइब्रेरी ने पिछली बार मेरे द्वारा देखे गए दृश्यों के पीछे किया है)।


दिलचस्प। मैंने कभी प्रोटोटाइप की जाँच नहीं की। किसी भी विचार क्यों jQuery के पर्दे के पीछे ऐसा नहीं करता है?
साइमन_वेर

मैंने देखा कि जब कठिनाइयों का सामना करना पड़ा और उस तकनीक का परीक्षण किया और यह सादे जावास्क्रिप्ट में काफी अच्छी तरह से काम किया
DHorse

5

कभी-कभी ऑफसेटहाइट शून्य वापस आ जाएगा क्योंकि आपके द्वारा बनाया गया तत्व अभी तक डोम में प्रदान नहीं किया गया है। मैंने ऐसी परिस्थितियों के लिए यह फ़ंक्शन लिखा है:

function getHeight(element)
{
    var e = element.cloneNode(true);
    e.style.visibility = "hidden";
    document.body.appendChild(e);
    var height = e.offsetHeight + 0;
    document.body.removeChild(e);
    e.style.visibility = "visible";
    return height;
}

आपको तत्व को क्लोन करने की आवश्यकता है अन्यथा यह डोम से पूरी तरह से हटा दिया जाएगा यह आपके कोड से लगता है कि यह क्या होगा।
16

इस कोड को तत्व को DOM में रखने का इरादा नहीं है। इसका इरादा इसे थोड़े समय के लिए डोम में रखना है (लंबे समय तक इसे प्रस्तुत करने और इसकी ऊंचाई पाने के लिए), फिर इसे निकाल लेता है। आप बाद में तत्व को बाद में डोम में डाल सकते हैं (यह जानने के बाद कि आपकी ऊंचाई इससे पहले कि आप क्या करेंगे)। फ़ंक्शन नाम "गेटहाइट" पर ध्यान दें; यह सब कोड करने का इरादा है।
लोनी बेस्ट

@ पंकबिट: मैं देख रहा हूं कि आपका क्या मतलब है। आपका तत्व पहले से ही डोम में है। मेरे द्वारा लिखा गया कोड एक ऐसे तत्व के लिए है जो अभी DOM में नहीं है। जैसा कि आप कहते हैं, क्लोनिंग बेहतर होगा, क्योंकि यह कोई फर्क नहीं पड़ेगा कि तत्व डोम में है या नहीं।
लोनी बेस्ट

@punkbit: मैंने कोड उपयोग क्लोनिंग को संशोधित किया है, लेकिन इसका परीक्षण नहीं किया है।
लोनी बेस्ट

हाँ, यह मेरी बात थी। मुझे लगता है कि वह डोम में एक मौजूदा तत्व के लिए "तत्व" कहते हैं। लेकिन सब अच्छा! इस गलत न समझें।
punkbit

4

यदि आप पहले से ही jQuery का उपयोग कर रहे हैं, तो आपका सबसे अच्छा दांव .outerHeight()या है.height() , जैसा कि कहा गया है।

JQuery के बिना, आप उपयोग में बॉक्स-आकार की जाँच कर सकते हैं और विभिन्न पैडिंग + बॉर्डर + क्लाइंटहाइट जोड़ सकते हैं , या आप getComputedStyle का उपयोग कर सकते हैं :

var h = getComputedStyle (document.getElementById ('someDiv')); ऊँचाई;

h अब "53.825px" की तरह एक स्ट्रिंग होगा।

और मुझे संदर्भ नहीं मिल रहा है, लेकिन मुझे लगता है कि मैंने सुना है कि getComputedStyle()यह महंगा हो सकता है, इसलिए यह संभवतः ऐसा कुछ नहीं है जिसे आप प्रत्येक window.onscrollईवेंट पर कॉल करना चाहते हैं (लेकिन तब, न तो jQuery का है height())।


एक बार जब आपके पास ऊंचाई हो getComputedStyle, तो parseInt(h, 10)गणना के लिए पूर्णांक प्राप्त करने के लिए उपयोग करें।
RhodanV5500


1

अगर मैं आपके सवाल को सही तरह से समझ पाता, तो शायद कुछ इस तरह से मदद मिलती:

function testDistance(node1, node2) {
    /* get top position of node 1 */
    let n1Pos = node1.offsetTop;
    /* get height of node 1 */
    let n1Height = node1.clientHeight;
    /* get top position of node 2 */
    let n2Pos = node2.offsetTop;
    /* get height of node 2 */
    let n2Height = node2.clientHeight;

    /* add height of both nodes */
    let heightTogether = n1Height + n2Height;
    /* calculate distance from top of node 1 to bottom of node 2 */
    let actualDistance = (n2Pos + n2Height) - n1Pos;

    /* if the distance between top of node 1 and bottom of node 2
       is bigger than their heights combined, than there is something between them */
    if (actualDistance > heightTogether) {
        /* do something here if they are not together */
        console.log('they are not together');
    } else {
        /* do something here if they are together */
        console.log('together');
    } 
}

-4

क्या आपने सीएसएस में विशेष रूप से ऊंचाई निर्धारित की है? यदि आपको इसके offsetHeight;बजाय उपयोग करने की आवश्यकता नहीं हैheight

var h = document.getElementById('someDiv').style.offsetHeight;

8
ऑफसेटहाइट खुद तत्व की एक संपत्ति है, इसकी शैली की नहीं।
21
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.