私は基本的に巨大なテーブルを表示するjQuery可用性カレンダーを書いています。どれくらい巨大ですか?過去2年間、現在の年、および将来の2年間の毎日の34行と1列があります。私はあなたのために計算をします:62,000以上のテーブルセル。
はい、これは少しゆっくりとロードされますが、ロードされると、カレンダーは私たちのニーズに正確に適合します。問題は1つだけです。
ユーザーは、セルのブロックを選択できる必要があります。ユーザーがセルのグループの周りにボックスを描画し、ボックス内のすべてのセルを選択できるように、UI内にすべてを設定しました。痛々しいほど遅いのは、実際にそれらを「選択済み」とマークするプロセスです。これが私が使用するループコードです:
while(r<=thisRow) {
for(var c=startColumn;c<=thisColumn;c++) {
if($(".calendar_slot[row="+r+"][column="+c+"]").attr('selectable')=='YES') {
if (toggleDirection==0) { $(".calendar_slot[row="+r+"][column="+c+"]").removeClass('selected'); $(".calendar_slot[row="+r+"][column="+c+"]").html(''); }
if (toggleDirection==1) { $(".calendar_slot[row="+r+"][column="+c+"]").addClass('selected'); $(".calendar_slot[row="+r+"][column="+c+"]").html($(".calendar_slot[row="+r+"][column="+c+"]").attr('label')); }
}
}
r++;
}
ご覧のとおり、列と行のカスタム属性の値で選択する必要があります。すでにID値を使用している速度を同等に必要とする別のプロセスがあるため、これらをセルのIDに埋め込むことはできません。ID値に行と列の情報が含まれている場合、この他の関数は機能しなくなり、カスタム属性を使用する必要があるため、ここで発生しているのと同じ問題が発生します。
この選択プロセスをスピードアップする方法はありますか?ループ自体は長くはかかりません(jQueryのものをコメントアウトすると、非常に高速に実行されます)。したがって、カスタム属性の値に基づいてこれらのタスクを実行するためのより高速なジョブをjQueryに強制する方法が必要です。
何か案は?