Bagaimana Anda mendapatkan tinggi elemen yang diberikan?
Katakanlah Anda memiliki <div>
elemen dengan beberapa konten di dalamnya. Konten ini di dalam akan meregangkan ketinggian <div>
. Bagaimana Anda mendapatkan tinggi "yang diberikan" ketika Anda belum menetapkan ketinggian secara eksplisit. Jelas, saya mencoba:
var h = document.getElementById('someDiv').style.height;
Apakah ada trik untuk melakukan ini? Saya menggunakan jQuery jika itu membantu.
javascript
jquery
css
height
Buddy Jo
sumber
sumber
Jawaban:
Seharusnya begitu
dengan jQuery. Ini mengambil ketinggian item pertama dalam set yang dibungkus sebagai angka.
Mencoba menggunakan
hanya berfungsi jika Anda telah menetapkan properti di tempat pertama. Sangat tidak berguna!
sumber
Coba salah satu dari:
clientHeight
termasuk ketinggian dan bantalan vertikal.offsetHeight
termasuk ketinggian, bantalan vertikal, dan batas vertikal.scrollHeight
termasuk ketinggian dokumen yang terkandung (akan lebih besar dari sekadar tinggi jika terjadi pengguliran), bantalan vertikal, dan batas vertikal.sumber
.clientWidth/.clientHeight
JANGAN sertakan lebar gulir jika gulir ditampilkan. Jika Anda ingin lebar gulir dimasukkan, gunakanelement.getBoundingClientRect().width
sajaNON JQUERY karena ada banyak tautan yang digunakan
elem.style.height
di bagian atas jawaban ini ...INNER HEIGHT:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
HEAT OUTER:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
Atau salah satu referensi favorit saya: http://youmightnotneedjquery.com/
sumber
Kamu bisa menggunakan
.outerHeight()
untuk tujuan ini.Ini akan memberi Anda ketinggian elemen penuh. Anda juga tidak perlu mengatur
css-height
elemen apa pun . Untuk berjaga-jaga, Anda dapat menjaga ketinggiannya secara otomatis sehingga dapat dirender sesuai ketinggian konten.Untuk tampilan yang jelas dari fungsi-fungsi ini Anda dapat pergi ke situs jQuery atau posting rinci di sini .
itu akan menghapus perbedaan antara
.height()
/innerHeight()
/outerHeight()
sumber
Saya menggunakan ini untuk mendapatkan ketinggian elemen (return float) :
Ini juga berfungsi ketika Anda menggunakan DOM virtual . Saya menggunakannya di Vue seperti ini:
sumber
maka cukup:
style.height
sumber
Pasti digunakan
atau
Saya memposting ini sebagai jawaban tambahan karena ada beberapa hal penting yang baru saya pelajari.
Saya hampir jatuh ke dalam perangkap sekarang menggunakan offsetHeight. Inilah yang terjadi :
Ini hanya sebagian saja:
Yup itu terlihat pada KEDUA gulir dan offset. Jika gagal, akan terlihat lebih jauh, dengan mempertimbangkan peramban akun dan masalah kompatibilitas css. Dengan kata lain STUFF I DONT CARE ABOUT - atau mau.
Tapi saya tidak harus. Terima kasih jQuery!
Moral dari cerita: jika jQuery memiliki metode untuk sesuatu itu mungkin karena alasan yang baik, kemungkinan terkait dengan kompatibilitas.
Jika Anda belum membaca daftar metode jQuery baru-baru ini saya sarankan Anda melihatnya.
sumber
sumber
elem.getBoundingClientRect().height
Saya membuat kode sederhana yang bahkan tidak perlu JQuery dan mungkin akan membantu beberapa orang. Ia mendapatkan tinggi total 'ID1' setelah dimuat dan menggunakannya pada 'ID2'
Kemudian atur saja tubuh untuk memuatnya
sumber
Hm kita bisa mendapatkan geometri Elemen ...
Bagaimana dengan JS polos ini?
sumber
var geometry; geometry={};
bisa dengan mudahvar geometry={};
Saya pikir cara terbaik untuk melakukan ini pada tahun 2020 adalah dengan menggunakan js dan
getBoundingClientRect().height;
Ini sebuah contoh
Selain mendapatkan
height
cara ini, kami juga memiliki akses ke banyak hal lain tentangdiv
.sumber
Jadi ini jawabannya?
"Jika Anda perlu menghitung sesuatu tetapi tidak menunjukkannya, setel elemen ke
visibility:hidden
danposition:absolute
, tambahkan ke pohon DOM, dapatkan offsetHeight, dan hapus. (Itulah yang dilakukan perpustakaan prototipe di belakang garis saat terakhir kali saya memeriksa)."Saya memiliki masalah yang sama pada sejumlah elemen. Tidak ada jQuery atau Prototipe untuk digunakan di situs tapi saya semua mendukung meminjam teknik jika berhasil. Sebagai contoh beberapa hal yang gagal berfungsi, diikuti oleh apa yang berhasil, saya memiliki kode berikut:
yang pada dasarnya mencoba apa saja untuk mendapatkan hasil nol. ClientHeight tanpa pengaruh. Dengan elemen masalah saya biasanya mendapatkan NaN di Base dan nol di ketinggian Offset dan Scroll. Saya kemudian mencoba solusi Add DOM dan clientRects untuk melihat apakah itu berfungsi di sini.
29 Jun 2011, saya memang memperbarui kode untuk mencoba menambahkan DOM dan clientHeight dengan hasil yang lebih baik dari yang saya harapkan.
1) clientHeight juga 0.
2) Dom benar-benar memberi saya ketinggian yang hebat.
3) ClientRects mengembalikan hasil yang hampir identik dengan teknik DOM.
Karena elemen yang ditambahkan bersifat fluida, ketika mereka ditambahkan ke elemen DOM Temp yang sebaliknya kosong, elemen-elemen tersebut diberikan sesuai dengan lebar wadah itu. Ini jadi aneh, karena itu 30px lebih pendek daripada akhirnya.
Saya menambahkan beberapa foto untuk menggambarkan bagaimana ketinggian dihitung secara berbeda.
Perbedaan ketinggiannya jelas. Saya tentu saja dapat menambahkan posisi absolut dan tersembunyi tetapi saya yakin itu tidak akan berpengaruh. Saya terus diyakinkan bahwa ini tidak akan berhasil!
(Saya ngelantur lebih jauh) Ketinggian yang keluar (menjadikan) lebih rendah dari tinggi yang diberikan benar. Ini dapat diatasi dengan mengatur lebar elemen Temp DOM agar sesuai dengan induk yang ada dan dapat dilakukan secara cukup akurat dalam teori. Saya juga tidak tahu apa hasil dari menghapus mereka dan menambahkannya kembali ke lokasi mereka yang ada. Ketika mereka tiba melalui teknik innerHTML saya akan mencari menggunakan pendekatan yang berbeda ini.
* NAMUN * Tidak ada yang diperlukan. Bahkan itu berfungsi seperti yang diiklankan dan mengembalikan ketinggian yang benar !!!
Ketika saya bisa membuat menu terlihat lagi dengan luar biasa DOM telah mengembalikan ketinggian yang tepat per tata letak cairan di bagian atas halaman (279px). Kode di atas juga menggunakan getClientRects yang mengembalikan 280px.
Ini diilustrasikan dalam snapshot berikut (diambil dari Chrome sekali berfungsi.)
Sekarang saya tidak tahu mengapa trik prototipe itu berhasil, tetapi sepertinya begitu. Atau, getClientRects juga berfungsi.
Saya menduga penyebab semua masalah ini dengan elemen-elemen khusus ini adalah penggunaan innerHTML bukan appendChild, tapi itu adalah spekulasi murni pada titik ini.
sumber
offsetHeight
, biasanya.Jika Anda perlu menghitung sesuatu tetapi tidak menunjukkannya, setel elemen ke
visibility:hidden
danposition:absolute
, tambahkan ke pohon DOM, dapatkanoffsetHeight
, dan hapus. (Itulah yang dilakukan perpustakaan prototipe di belakang layar terakhir kali saya periksa).sumber
Terkadang offsetHeight akan mengembalikan nol karena elemen yang Anda buat belum dirender di Dom. Saya menulis fungsi ini untuk keadaan seperti itu:
sumber
Jika Anda sudah menggunakan jQuery, taruhan terbaik Anda adalah
.outerHeight()
atau.height()
, seperti yang telah dinyatakan.Tanpa jQuery, Anda dapat mencentang ukuran kotak yang digunakan dan menambahkan berbagai bantalan + batas + clientHeight, atau Anda dapat menggunakan getComputedStyle :
var h = getComputedStyle (document.getElementById ('someDiv')). height;
h
sekarang akan menjadi string seperti "53.825px".Dan saya tidak dapat menemukan referensi, tapi saya pikir saya dengar
getComputedStyle()
bisa mahal, jadi itu mungkin bukan sesuatu yang ingin Anda panggil pada setiapwindow.onscroll
acara (tapi kemudian, tidak juga jQueryheight()
).sumber
getComputedStyle
, gunakanparseInt(h, 10)
untuk mendapatkan bilangan bulat untuk perhitungan.Dengan Mootools :
$('someDiv').getSize().y
sumber
Jika saya memahami pertanyaan Anda dengan benar, maka mungkin sesuatu seperti ini akan membantu:
sumber
Sudahkah Anda mengatur ketinggian di css secara spesifik? Jika belum, Anda harus menggunakan
offsetHeight;
daripadaheight
sumber