উপাদানগুলির একটি সেট থেকে সর্বোচ্চ উচ্চতা সহ উপাদান


85

আমি 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>

উপরের দিকে তাকিয়ে আমরা জানি যে ২ য় div(4 টি লাইন সহ) সকলের সর্বোচ্চ উচ্চতা রয়েছে। আমি এটি কীভাবে খুঁজে পাব? কেউ দয়া করে সাহায্য করতে পারেন?

এখনও পর্যন্ত আমি চেষ্টা করেছি:

$("div.panel").height()যা 1 ম এর উচ্চতা প্রদান করে div

উত্তর:


213

ব্যবহার করুন .map()এবং Math.max

var maxHeight = Math.max.apply(null, $("div.panel").map(function ()
{
    return $(this).height();
}).get());

যদি এটি পড়তে বিভ্রান্ত হয় তবে এটি আরও পরিষ্কার হতে পারে:

var heights = $("div.panel").map(function ()
    {
        return $(this).height();
    }).get();

maxHeight = Math.max.apply(null, heights);

4
এটি সর্বাধিক উচ্চতা খুঁজে পেয়েছে তবে আসল উপাদানটির কোনও রেফারেন্স নয়।
ভিনসেন্ট রামধনি

তুমি ঠিক বলছো; আমি পরিষ্কার ছিলাম না যে ওপিও উপাদানটি চায়। আপনার উত্তর সেই ক্ষেত্রে কাজ করে works
ম্যাট বল

4
@ ম্যাটবাল কেন ফাংশনটি, আমি জিজ্ঞাসা করতে পারি? এটি কী করে এবং এর উদ্দেশ্য কী?
chodorowicz

4
আপনি জিজ্ঞাসা করেছেন @ chodorowicz খুশি। এই উত্তরটি দেখুন , দ্বিতীয় শিরোনামে।
ম্যাট বল

4
@ ম্যাটবাল ধন্যবাদ সুতরাং jQuery .map অ্যারের মতো বস্তুটি ফেরত দেয় এবং .get এটিকে অ্যারে রূপান্তরিত করে। তবে মনে হচ্ছে ম্যাথ.ম্যাক্স এই উভয় প্রকারের উপর সহজেই কাজ করে (কেবলমাত্র Chrome কনসোলে পরীক্ষা করা হয়েছে), তাই এই ক্ষেত্রে .টি অপ্রয়োজনীয় বলে মনে হয়। নাকি আমি ভুল করছি?
chodorowicz

20

আপনি যে এইচটিএমএল পোস্ট <br>করেছেন সেগুলিকে বিভিন্ন উচ্চতার সাথে ডিভগুলি রাখতে কিছু ব্যবহার করা উচিত । এটার মত:

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

এগুলি ছাড়াও, আপনি যদি সর্বোচ্চ উচ্চতার সাথে ডিভের রেফারেন্স চান তবে আপনি এটি করতে পারেন:

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");

এইটির সাথে সাবধান হন, যদি আপনি ভিতরে jQuery পদ্ধতি ব্যবহার না করেন (যেমন .heightএই ক্ষেত্রে) তবে আপনাকে অবশ্যই এটির অবলম্বন করতে হবে, উদাহরণস্বরূপ : `$ (এটি) [0] .স্ক্রোলহাইট;`
রজারডপ্যাক

5

আপনি যদি একাধিক জায়গায় পুনরায় ব্যবহার করতে চান:

var maxHeight = function(elems){
    return Math.max.apply(null, elems.map(function ()
    {
        return $(this).height();
    }).get());
}

তারপরে আপনি ব্যবহার করতে পারেন:

maxHeight($("some selector"));

1

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>


1

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>



0

আপনি যদি পুরো স্ট্যান্ডার্ড জাভাস্ক্রিপ্টে বাছাই করতে আগ্রহী হন বা প্রতিটি () জন্য ব্যবহার না করে:

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]});

0

আমি বলার সবচেয়ে সহজ এবং পরিষ্কার উপায় হ'ল:

var maxHeight = 0, maxHeightElement = null;
$('.panel').each(function(){
   if ($(this).height() > maxHeight) {
       maxHeight = $(this).height();
       maxHeightElement = $(this);
   }
});

0

এটি কোনও উপায়ে সহায়ক হতে পারে। @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 );
  
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.