2013-06-27 34 views
-1

我目前在我的文檔中有許多表格都在類table.grid下。我試圖通過並刪除任何沒有<td>字段的表頭,即沒有結果生成的空表/表格。表頭類別的標題爲table.grid tbody tr.header th,td的後續爲table.grid tbody tr td。目前我的代碼如下:邏輯錯誤清理空表

$('table.grid tbody tr.header th').each(function (i) { 
    var remove = 0; 
    var tds = $(this).parents('tbody').find('tr td:nth-child(' + (i + 1) + ')'); 

    tds.each(function (j) { 
     if (this.innerHTML == '') remove++; 
    }); 

    if (remove == ($('table.grid tbody tr td').length - 1)) { 
     $(this).hide(); 
     tds.hide(); 
    } 
}); 

但不幸的是,這是刪除每個表頭。不僅僅是沒有內容的人。我相信我正在用我的if語句錯誤地調用td字段,但我不確定如何解決該問題。我試圖稱它爲$(this).next('table.grid tbody tr td').length - 1),並且也嘗試過closest()運營商無濟於事。

+0

有一個更簡單的方法來決定何時刪除一行。設置var remove = true;'。如果'this.innerHTML!='''在tds.each()內部,則將remove設置爲false。之後,如果'remove'爲true,則隱藏該行。打敗空單元格並將其與行中單元格的數量進行比較。 –

+1

能否請您向我們展示一行表格的簡要示例以刪除?這將幫助我檢查你的選擇器。 –

+0

當然。對不起,太不明確。查看這個jsfiddle,瞭解兩個部分表的示例。第一個表將被保留,因爲它有結果,但是我正在尋找清除整個空的第二個表,因爲在文檔生成時沒有結果複合。 http://jsfiddle.net/sM3Uc/1/如果你需要更多的信息,或者我不小心省略了一些東西,請告訴我。 – Fields

回答

1

我不是100%確定我明白你隱藏表格的確切要求。我假設一個「空」表只有一行包含標題信息。任何其他行都會有內容,從而使該表非空。我決定利用這一點,並檢查非標頭行數:

$('table.grid').each(function (i) { 
    //Select all rows in this table that aren't .header 
    var rows = $(this).find("tr").not(".header"); 

    if (rows.length == 0) 
    { 
     //no rows except for header - hide the table. 
     $(this).hide(); 
    } 
}); 

您可以在fiddle here看到這一點,使用您提供的HTML。它隱藏了第二個表,因爲它沒有超出標題的行。

只是一個提示......如果你控制這個應用程序的服務器端,你絕對最好的策略是檢測一個空的結果集並跳過它,所以你不必在以後清理它。您可能沒有這個選項,所以這可能會幫助您在瀏覽器中處理它。

請讓我知道,如果我誤解了你什麼時候隱藏的需求。

+0

這實際上是完美的。你是對的,但不幸的是,我絕對沒有任何訪問服務器端的東西。只需修補一些噁心的視覺混亂:( – Fields