2009-06-17 122 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引擎的改进,差异不再那么大了,虽然