2009-06-17 164 views
0

此方法用於基於元數據json對象的集合來隱藏表中的列。表中每列有一個對象。目前在一個具有500行〜15列的表格中,其中隱藏了6個此方法需要約2秒鐘才能執行。使用JQuery隱藏表列

我正試圖優化它以加快速度。有什麼建議麼?

function hideHiddenColumns() { 
    if (tableMetaData.length) { 
    for (var index = 0; index < tableMetaData.length; index++) { 
     var item = tableMetaData[index]; 
     if (!item.DisplayFlag) { 
     $table.find('th:nth-child(' + (index + 1) + '), td:nth-child(' + (index + 1) + ')').hide(); 
     } 
    } 
    } 
} 

回答

2

我不知道在哪裏$table從何而來,但如何好老DOM,而不是一個複雜的jQuery選擇:

$table.each(function() { 
    var rows = this.rows; 
    var rowCount = rows.length; 

    for (var i = 0; i < rowCount; i++) { 
    var cells = rows[i].cells; 
    if (cells.length > index) { 
     $(cells[index]).hide(); 
    } 
    } 
}); 

顯然,這意味着在表中不存在合併單元格。

2

與普通JS一起去,jsust像Tomalak建議的那樣。您還可以while優化for循環:

var item, i = tableMetaData.length; 
while (i--) { 
    item = tableMetaData[i]; 
    // do what's gotta be done 
} 

曾經是迄今爲止速度最快的循環結構的逆轉while循環。隨着最新的JS引擎的改進,差異不再那麼大了,雖然