รับ div ส่วนสูงด้วย JavaScript ธรรมดา


312

มีความคิดเห็นเกี่ยวกับวิธีเพิ่มความสูงของ div โดยไม่ใช้ jQuery หรือไม่?

ฉันถูกค้นหามากเกิน Stack สำหรับคำถามนี้และดูเหมือนว่าทุกคำตอบจะชี้ไปที่ของ .height()jQuery

ฉันลองอะไรทำนองmyDiv.style.heightนั้น แต่มันก็ไม่ได้ผลอะไรเลยแม้แต่ตอนที่ div ของฉันมีwidthและheightตั้งค่าใน CSS



คำตอบ:


587
var clientHeight = document.getElementById('myDiv').clientHeight;

หรือ

var offsetHeight = document.getElementById('myDiv').offsetHeight;

clientHeight รวมถึงการขยาย

offsetHeight รวมถึงการขยาย, scrollBar และเส้นขอบ


2
offsetheight ไม่ wokr ที่ ie10 ด้านล่างquirksmode.org/mobile/tableViewport_desktop.html
กลัว

3
นอกจากนี้คุณยังสามารถใช้scrollHeightซึ่งรวมถึงความสูงของเอกสารที่มีอยู่ช่องว่างภายในแนวตั้งและเส้นขอบแนวตั้ง
Saeid Zebardast

5
clientHeightยังรวมถึงการขยายดังนั้นจึงไม่เท่ากับ$.height()
Eevee

2
เส้นขอบและขอบก็มีการใช้พื้นที่ :) และคำตอบของคุณหมายถึงclientHeightไม่รวมการขยาย และคำถามที่กล่าวถึงทั้งสอง$.height()และ.style.heightไม่รวมถึงการแพ็ดดิ้งการแนะนำผู้ถามก็ไม่ต้องการเช่นกัน
Eevee

3
หมายเหตุ: OP ไม่ได้ขอคำตอบที่ได้รับการยกเว้น padding ไม่มีวิธีแก้ปัญหาข้ามแพลตฟอร์มสำหรับสิ่งที่ฉันรู้
ด่าน


22

ตัวเลือกอื่นคือการใช้ฟังก์ชัน getBoundingClientRect โปรดทราบว่า getBoundingClientRect จะกลับมาเป็นสี่เหลี่ยมเปล่าถ้าองค์ประกอบของการแสดงผลเป็น 'ไม่มี'

ตัวอย่าง:

var elem = document.getElementById("myDiv");
if(elem) {
   var rect = elem.getBoundingClientRect();
   console.log(rect.height);  
}

2
ฉันคิดว่านี่เป็นทางออกที่ดีกว่า
Intervalia

11
var myDiv = document.getElementById('myDiv'); //get #myDiv
alert(myDiv.clientHeight);

ความสูงและความกว้างของลูกค้าคือสิ่งที่คุณกำลังมองหา

offsetHeight และ offsetWidth ส่งคืนความสูงและความกว้าง แต่รวมถึงเส้นขอบและแถบเลื่อน ขึ้นอยู่กับสถานการณ์คุณสามารถใช้อย่างใดอย่างหนึ่ง

หวังว่านี่จะช่วยได้


2

คำตอบอื่น ๆ ไม่ได้ทำงานสำหรับฉัน นี่คือสิ่งที่ฉันพบในw3schoolsสมมติว่าdivมีheightและ / หรือwidthชุด

สิ่งที่คุณต้องมีคือheightและwidthไม่รวมช่องว่างภายใน

    var height = document.getElementById('myDiv').style.height;
    var width = document.getElementById('myDiv').style.width;

คุณ downvoters:คำตอบนี้ช่วยอย่างน้อย 5 คนตัดสินโดย upvotes ที่ฉันได้รับ หากคุณไม่ชอบให้บอกฉันทีว่าทำไมฉันจึงสามารถแก้ไขได้ นั่นคือสัตว์เลี้ยงที่ฉุนที่สุดของฉันด้วย downvotes; คุณไม่ค่อยบอกฉันว่าทำไมคุณถึงลงคะแนน


23
สิ่งนี้จะไม่ทำงานจนกว่า div จะมีชุดheightและ / หรือwidth
hopkins-matt

1
ฉันคิดว่ามันถูกสันนิษฐานและโดยนัย คุณต้องการคำเตือนที่กล่าวถึงในคำตอบของฉันหรือไม่
craned

2
มันจะดีกว่า ฉันเองจะไม่พิจารณาวิธีอื่น ๆ ว่าไม่ถูกต้อง ฉันจะกล้าที่จะบอกว่าผมได้ใช้สำหรับการoffsetHeightและบ่อยกว่าclientHeight style.height
hopkins-matt

1
พวกเขาไม่ได้ทำงานให้ฉัน นั่นเป็นเหตุผลที่ฉันโพสต์คำตอบนี้
craned

1
ฉันไม่เห็นว่า w3schools พูดว่าวิธีอื่นไม่ถูกต้อง
aknuds1


1

นอกจากนี้el.clientHeightและel.offsetHeightเมื่อคุณต้องการความสูงของเนื้อหาภายในองค์ประกอบ (ไม่ว่าจะตั้งค่าความสูงขององค์ประกอบนั้นel.scrollHeightไว้ที่ใดก็ตาม) คุณสามารถใช้ ข้อมูลเพิ่มเติม

สิ่งนี้มีประโยชน์หากคุณต้องการตั้งค่าความสูงขององค์ประกอบหรือความสูงสูงสุดเป็นความสูงที่แน่นอนของเนื้อหาแบบไดนามิกภายใน ตัวอย่างเช่น:

var el = document.getElementById('myDiv')

el.style.maxHeight = el.scrollHeight+'px'

สำหรับทุกคนที่สงสัยว่าสิ่งนี้มีประโยชน์มากในการเปลี่ยน CSS สำหรับรายการแบบหล่นลงซึ่งมีเนื้อหาที่มีความสูงแบบไดนามิก
cronoklee


1

นี่เป็นอีกทางเลือกหนึ่ง:

var classElements = document.getElementsByClassName("className");

function setClassHeight (classElements, desiredHeightValue) 
    {
        var arrayElements = Object.entries(classElements);
        for(var i = 0; i< arrayElements.length; i++) {
            arrayElements[i][1].style.height = desiredHeightValue;
        }

    }

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.