2013-05-15 101 views
0

我有多個項目的表。每個條目錶行都是一個編輯錶行,其中有一個跨越列的單元格,其內部是HTML被動態加載到的DIV。問題是具有所有這些空表格行會導致在頁面呈現時出現大量額外的空白。顯示/隱藏錶行,如果一個孩子DIV爲空

我明白我不能動態HTML直接加載到細胞內,所以我有在它一個DIV我內容加載到。

我想隱藏任何錶行,而在它的子格是空的,表明錶行一旦信息已被動態加載到孩子DIV。這個動態加載的信息也可以刪除,所以我需要再次將它隱藏一遍。

<table width="100%"> 
    <tbody> 
    <tr> 
     <td>A</td> 
     <td>B</td> 
     <td>C</td> 
    </tr> 
    <tr style="display: none;"> 
     <td colspan="3"><div></div></td> 
    </tr> 
    </tbody> 
</table> 



$("tr").each(function() { 
    if (this.children().filter(":empty").length) { 
     this.hide(); 
    } else { 
     this.show(); 
    } 
}); 
+5

哪裏是你的javascript代碼? – Getz

+0

我剛纔添加了它 – cianz

回答

2
  • div不是孩子,這是一個孫子,因此children()不會找到div s。改爲使用上下文或find

  • 您的DOM元素,而不是jQuery的元素上操作hideshow。你需要首先將它封裝在jQuery中。

因此,run this code everytime you load something

//find empty divs and hide it's tr 
$("div:empty").closest('tr').hide(); 

//find non-empty divs and show it's tr 
$("div:not(:empty)").closest('tr').show(); 

再看看馬!沒有循環!沒有each! :d

+1

檢查jsfiddle [here](http://jsfiddle.net/satysalokhe/rtgSG/1/)說明約瑟夫jQuery代碼 – SatishJS

+0

謝謝,但這隻能運行一次嗎?當我動態加載到DIV中時,它仍然處於隱藏狀態。 – cianz

+0

@cianz更新:) – Joseph

0

您應該使用$(this)代替this

原因是:$(this)是一個jQuery對象,它允許你調用jQuery方法像.children().filter(":empty")就可以了,而this僅僅是一個Javascript對象...