2009-06-17 7 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がどこから来るかわからないんだけど、どのように代わりに、複雑なjQueryのセレクタの古き良きDOMについて:

$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

Tomalakが示唆したように、プレーンなJS、jsustと一緒に行ってください。またwhileforループを最適化することができます。

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

これまでで最速のループ構造にするために使用逆転whileループを。最新のJSエンジンの最近の改良では、それ以上の違いはありません

関連する問題