รับความสูงของ div โดยไม่กำหนดความสูงใน css


93

มีวิธีใดบ้างที่จะได้รับความสูงขององค์ประกอบหากไม่มีการตั้งค่ากฎความสูง CSS สำหรับองค์ประกอบฉันไม่สามารถใช้.height()เมธอด jQuery ได้เนื่องจากต้องตั้งกฎ CSS ก่อน มีวิธีอื่นในการรับความสูงหรือไม่?


2
อะไรทำให้คุณคิดว่าheight()ต้องมีกฎ css
James Montagne

height()จะได้รับค่าความสูงที่คำนวณขององค์ประกอบ ...
elclanrs

1
ดูเหมือนว่าคุณกำลังพยายามเพิ่มความสูงของบางสิ่งในองค์ประกอบที่ซ่อนอยู่? หรือองค์ประกอบนั้นซ่อนอยู่ ไม่สามารถทำได้!
charlietfl

รวมรหัสของคุณเนื่องจากไม่มีข้อกำหนดในheightการตั้งค่า css ลิงค์นั้นไม่มีส่วนเกี่ยวข้องกับ jquery
James Montagne

"ข้อมูลเชิงลึก" นั้นมีอายุ 7 ปี!
charlietfl

คำตอบ:


224

jQuery .heightจะส่งคืนความสูงขององค์ประกอบให้คุณ ไม่จำเป็นต้องมีคำจำกัดความ CSS เนื่องจากจะกำหนดความสูงที่คำนวณได้

การสาธิต

คุณสามารถใช้.height(), .innerHeight()หรือouterHeight()ขึ้นอยู่กับสิ่งที่คุณต้องการ

ป้อนคำอธิบายภาพที่นี่

.height() - คืนค่าความสูงขององค์ประกอบไม่รวมช่องว่างขอบและระยะขอบ

.innerHeight() - ส่งคืนความสูงขององค์ประกอบรวมถึงการขยาย แต่ไม่รวมเส้นขอบและระยะขอบ

.outerHeight() - ส่งคืนความสูงของ div รวมทั้งเส้นขอบ แต่ไม่รวมระยะขอบ

.outerHeight(true) - ส่งกลับความสูงของ div รวมระยะขอบ

ตรวจสอบข้อมูลโค้ดด้านล่างสำหรับการสาธิตสด :)

$(function() {
  var $heightTest = $('#heightTest');
  $heightTest.html('Div style set as "height: 180px; padding: 10px; margin: 10px; border: 2px solid blue;"')
    .append('<p>Height (.height() returns) : ' + $heightTest.height() + ' [Just Height]</p>')
    .append('<p>Inner Height (.innerHeight() returns): ' + $heightTest.innerHeight() + ' [Height + Padding (without border)]</p>')
    .append('<p>Outer Height (.outerHeight() returns): ' + $heightTest.outerHeight() + ' [Height + Padding + Border]</p>')
    .append('<p>Outer Height (.outerHeight(true) returns): ' + $heightTest.outerHeight(true) + ' [Height + Padding + Border + Margin]</p>')
});
div { font-size: 0.9em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="heightTest" style="height: 150px; padding: 10px; margin: 10px; border: 2px solid blue; overflow: hidden; ">
</div>


37

เพียงบันทึกไว้ในกรณีที่คนอื่นมีปัญหาเดียวกัน

ฉันมีปัญหาเดียวกันและพบคำตอบที่ต่างออกไป ฉันพบว่าการรับความสูงของ div ที่มีความสูงนั้นถูกกำหนดโดยเนื้อหานั้นจำเป็นต้องเริ่มต้นบนwindow.loadหรือwindow.scrollไม่ใช่documentมิฉะนั้นฉันจะได้รับความสูง / ความสูงที่น้อยกว่าปกติเช่นก่อนที่รูปภาพจะโหลด ฉันยังใช้outerHeight ()

var currentHeight = 0;
$(window).load(function() {
    //get the natural page height -set it in variable above.

    currentHeight = $('#js_content_container').outerHeight();

    console.log("set current height on load = " + currentHeight)
    console.log("content height function (should be 374)  = " + contentHeight());   

});

1
คุณอาจมีความสูงแปลก ๆ เนื่องจากมีคำแนะนำเพิ่มเติมที่เปลี่ยนความสูงหลังจากที่คุณใช้ / พิมพ์ ขอแนะนำให้ขอความสูงในตอนท้ายของสคริปต์ของคุณ
Gjaa

10

สามารถทำเช่นนี้ในjQuery ลองตัวเลือกทั้งหมด.height(), หรือ.innerHeight().outerHeight()

$('document').ready(function() {
    $('#right_div').css({'height': $('#left_div').innerHeight()});
});

ตัวอย่างภาพหน้าจอ

ป้อนคำอธิบายภาพที่นี่

หวังว่านี่จะช่วยได้ ขอบคุณ !!


8

นอกจากนี้ยังให้แน่ใจว่าdiv ในปัจจุบันคือการผนวกเข้ากับ DOMและสามารถมองเห็นได้


13
โปรดทราบว่าฉันอาจเหมาะกับการแสดงความคิดเห็นมากกว่าคำตอบ
kkuilla

4
เขาคงไม่มีสิทธิ์แสดงความคิดเห็นคลายเครียด
StackOverflowed

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