2016-04-16 37 views
0

我想獲取每個div的子元素,然後根據各自的子元素高度設置每個div的高度。在單獨的div中獲取子元素高度

我試圖找到一個類似的問題,但無法找到我想要的。我知道我需要一個.each功能,但我無法實現它的功能。

下面是我的代碼:

HTML

<ul> 
    <li> 
    <div class="container"> 
     <h1>content</h1> 
     <a href="#">content</a> 
    </div> 
    </li> 
    <li> 
    <div class="container"> 
     <h1>very long contents</h1> 
     <p>content</p> 
     <a href="#">content</a> 
    </div> 
    </li> 
    <li> 
    <div class="container"> 
     <h1>super uber ultra long contents</h1> 
     <p>content</p> 
     <a href="#">content</a> 
    </div> 
    </li> 
</ul> 

jQuery的

$("ul li").each(function() { 
     $("ul li div").each(function(){ 
      var div_ht = 0; 
      $("ul li div").children().each(function() { 
       div_ht += $(this).outerHeight(true); 
      }); 
      $("ul li div").height(div_ht); 
     }); 
    }); 

我想實現的是讓我們說的第一個div的子元素的總高度爲100像素,那麼它會將第一個div設置爲100px高度。如果第二個div的子元素的總高度是300px,那麼它會將第二個div設置爲300px高度。

+0

如果我是正確的,你試圖獲得每個div子元素的平均高度? – Fil

+0

嗨菲爾,感謝您的幫助,但我已經通過gurvinder的幫助解決了我的問題。我沒有得到每個div子元素的平均高度。我實際上想根據自己的孩子元素的高度來設置每個div的高度。 – Dr3am3rz

+0

太棒了... – Fil

回答

2

繼@ gurvinder372回答,你不妨使用單個查詢:

$("ul li div").each(function() { 
    var divHeight = 0; 
    $(this).children().each(function() { 
    divHeight += $(this).height(); 
    }); 
    $(this).height(divHeight); 
}) 

,因爲您想爲每個ul li div元素完成這項工作。 需要注意的是,一個每/功能語句內是很重要的:

  • this指向HTML元素(見參考文檔)
  • $(this)點從HTML元素構成的JQuery的元件(從而使你所有的jQuery庫的靈活性)

編輯 功能find執行新選擇從調用它的選擇開始。

從「UL麗」元素的根進行選擇然後執行每個元件上的部分選定:

$("ul li").find("div"); 

ul li div元件進行選擇frmo根=>這應該是更有效的,用它如果你不打算做的ul li級別的任何作業:

$("ul li div"); 

這相當於$("").find("ul li div");

+0

感謝您的簡化版!它有點奇怪,我確實使用$(「ul li div」)。each();函數之前,但它返回了3個div中所有子元素的高度。但現在它工作得很好。 @。@ – Dr3am3rz

+0

我也從你身上學到了新東西 – Fil

3

嘗試

$("ul li").each(function() { 
    $(this).find("div").each(function(){ //this line changed, iterating individual li's div rather than whole bunch 
     var div_ht = 0; 
     $(this).children().each(function() { //observe change in this line too 
      div_ht += $(this).outerHeight(true); 
     }); 
     $(this).height(div_ht); //observe change in this line too 
    }); 
}); 

另外,如果你只是想設置DIV爲子女身高的總和的高度,然後簡單地設置這些div的高度auto

$("ul li div").css("height", "auto"); 
+0

OMG!非常感謝!我一直在嘗試2天,仍然無法實現。我不能使用高度自動,因爲我的div使用絕對位置,我需要讓它顯示中間。所以關鍵是使用.find。儘管如此,使用.find和不使用它之間的差異讓我感到困惑。 – Dr3am3rz