Dapatkan tinggi div tanpa menetapkan ketinggian di css

93

Apakah ada cara untuk mendapatkan tinggi elemen jika tidak ada aturan tinggi CSS yang ditetapkan untuk elemen. Saya tidak dapat menggunakan .height()metode jQuery karena memerlukan aturan CSS yang ditetapkan terlebih dahulu? Apakah ada cara lain untuk mendapatkan ketinggian?

Samuel Lopez
sumber
2
Apa yang membuat Anda berpikir height()perlu memiliki aturan css?
James Montagne
height()akan mendapatkan tinggi yang dihitung elemen ...
elclanrs
1
terdengar seperti Anda mencoba mendapatkan ketinggian sesuatu di dalam elemen tersembunyi? atau elemen itu sendiri tersembunyi. Tidak bisa!
charlietfl
Sertakan kode Anda karena tidak ada persyaratan untuk heightmemiliki set css. Tautan itu tidak ada hubungannya dengan jquery.
James Montagne
tautan "wawasan" itu berusia 7 tahun!
charlietfl

Jawaban:

224

jQuery .heightakan mengembalikan Anda ketinggian elemen. Itu tidak membutuhkan definisi CSS karena ini menentukan tinggi yang dihitung.

DEMO

Anda dapat menggunakan .height(), .innerHeight()atau outerHeight()berdasarkan apa yang Anda butuhkan.

masukkan deskripsi gambar di sini

.height() - mengembalikan ketinggian elemen tidak termasuk padding, border dan margin.

.innerHeight() - mengembalikan ketinggian elemen termasuk padding tetapi tidak termasuk perbatasan dan margin.

.outerHeight() - mengembalikan tinggi div termasuk perbatasan tetapi tidak termasuk margin.

.outerHeight(true) - mengembalikan tinggi div termasuk margin.

Lihat cuplikan kode di bawah ini untuk demo langsung. :)

$(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>

Selvakumar Arumugam
sumber
37

Hanya catatan jika orang lain memiliki masalah yang sama.

Saya memiliki masalah yang sama dan menemukan jawaban yang berbeda. Saya menemukan bahwa mendapatkan tinggi div yang tingginya ditentukan oleh isinya perlu dimulai pada window.load , atau window.scroll bukan document.ready sebaliknya saya mendapatkan ketinggian ganjil / tinggi lebih kecil, yaitu sebelum gambar dimuat. Saya juga menggunakan 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());   

});
Iamsamstimpson
sumber
1
Mungkin Anda mendapatkan tinggi yang aneh karena ada lebih banyak instruksi yang mengubah ketinggian setelah Anda menggunakan / mencetaknya. Direkomendasikan untuk menanyakan ketinggian di akhir naskah Anda
Gjaa
10

Dapat melakukan ini di jQuery . Coba semua opsi .height(), .innerHeight()atau .outerHeight().

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

Contoh Screenshot

masukkan deskripsi gambar di sini

Semoga ini membantu. Terima kasih!!

Madan Sapkota
sumber
8

Pastikan juga div saat ini ditambahkan ke DOM dan terlihat .

Tom Scholes
sumber
13
Harap dicatat bahwa ini mungkin saya lebih cocok sebagai komentar daripada jawaban.
kkuilla
4
Dia tidak akan memiliki hak untuk berkomentar, santai saja.
StackOverflowed
4
Saya menganggap ini sedikit informasi penting, karena tidak ada jawaban lain yang akan berfungsi jika elemen tidak dilampirkan ke DOM untuk memulai.
Guido