У меня есть набор div
элементов. В jQuery
, я хотел бы иметь возможность узнать div
максимальную высоту, а также высоту этого div
. Например:
<div>
<div class="panel">
Line 1
Line 2
</div>
<div class="panel">
Line 1<br/>
Line 2<br/>
Line 3<br/>
Line 4<br/>
</div>
<div class="panel">
Line 1
</div>
<div class="panel">
Line 1
Line 2
</div>
</div>
Глядя на вышеизложенное, мы знаем, что 2-я div
(с 4 линиями) имеет максимальную высоту из всех. Как мне это узнать? Может кто-нибудь помочь?
Пока я пробовал:
$("div.panel").height()
который возвращает высоту 1-го div
.
В опубликованном вами html следует использовать некоторые,
<br>
чтобы на самом деле иметь div с разной высотой. Как это:<div> <div class="panel"> Line 1<br> Line 2 </div> <div class="panel"> Line 1<br> Line 2<br> Line 3<br> Line 4 </div> <div class="panel"> Line 1 </div> <div class="panel"> Line 1<br> Line 2 </div> </div>
Кроме того, если вам нужна ссылка на div с максимальной высотой, вы можете сделать это:
var highest = null; var hi = 0; $(".panel").each(function(){ var h = $(this).height(); if(h > hi){ hi = h; highest = $(this); } }); //highest now contains the div with the highest so lets highlight it highest.css("background-color", "red");
источник
.height
в этом случае), тогда вы должны разыменовать его, например: `$ (this) [0] .scrollHeight;`Если вы хотите использовать повторно в нескольких местах:
var maxHeight = function(elems){ return Math.max.apply(null, elems.map(function () { return $(this).height(); }).get()); }
Тогда вы можете использовать:
maxHeight($("some selector"));
источник
function startListHeight($tag) { function setHeight(s) { var max = 0; s.each(function() { var h = $(this).height(); max = Math.max(max, h); }).height('').height(max); } $(window).on('ready load resize', setHeight($tag)); } jQuery(function($) { $('#list-lines').each(function() { startListHeight($('li', this)); }); });
#list-lines { margin: 0; padding: 0; } #list-lines li { float: left; display: table; width: 33.3334%; list-style-type: none; } #list-lines li img { width: 100%; height: auto; } #list-lines::after { content: ""; display: block; clear: both; overflow: hidden; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> <ul id="list-lines"> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_sddu7-2560x1600.jpg" alt="" /> <br /> Line 1 <br /> Line 2 </li> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_mixwall66-2560x1600.jpg" alt="" /> <br /> Line 1 <br /> Line 2 <br /> Line 3 <br /> Line 4 </li> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_sddu7-2560x1600.jpg" alt="" /> <br /> Line 1 </li> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_mixwall66-2560x1600.jpg" alt="" /> <br /> Line 1 <br /> Line 2 </li> </ul>
источник
ul, li { list-style: none; margin: 0; padding: 0; } ul { display: flex; flex-wrap: wrap; } ul li { width: calc(100% / 3); } img { width: 100%; height: auto; }
<ul> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_sddu7-2560x1600.jpg" alt=""> <br> Line 1 <br> Line 2 </li> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_mixwall66-2560x1600.jpg" alt=""> <br> Line 1 <br> Line 2 <br> Line 3 <br> Line 4 </li> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_sddu7-2560x1600.jpg" alt=""> <br> Line 1 </li> <li> <img src="http://img2.vetton.ru//upl/1000/346/138/vetton_ru_mixwall66-2560x1600.jpg" alt=""> <br> Line 1 <br> Line 2 </li> </ul>
источник
Попробуйте узнать высоту div и установить высоту div (аналогично тому, что опубликовал Мэтт, но с использованием цикла)
источник
Если вас интересовала сортировка полностью в стандартном JavaScript или без использования forEach ():
var panels = document.querySelectorAll("div.panel"); // You'll need to slice the node_list before using .map() var heights = Array.prototype.slice.call(panels).map(function (panel) { // return an array to hold the item and its value return [panel, panel.offsetHeight]; }), // Returns a sorted array var sortedHeights = heights.sort(function(a, b) { return a[1] > b[1]});
источник
Я бы сказал, что самый простой и понятный способ:
var maxHeight = 0, maxHeightElement = null; $('.panel').each(function(){ if ($(this).height() > maxHeight) { maxHeight = $(this).height(); maxHeightElement = $(this); } });
источник
Это может быть чем-то полезным. Исправление кода из @diogo
$(window).on('load',function(){ // get the maxHeight using innerHeight() function var maxHeight = Math.max.apply(null, $("div.panel").map(function () { return $(this).innerHeight(); }).get()); // Set the height to all .panel elements $("div.panel").height( maxHeight ); });
источник