私は、最大60行50列までのhtmlテーブルを表示するためのビジネス要件が厳しいアプリケーションに取り組んでいます。大規模なテーブルで高性能の選択可能なセル - IE6
理想的には、ユーザーは個々の表のセルを選択するか、クリックしてドラッグして複数のセルを選択することができます。
私の悩みは、現時点でIE6を使用することに限られており、このような選択をこのような種類のセルで行うことができます。
私の現在の方法は次のように基本的になります。
$(document).ready(function() {
var selecting = false;
var colStart, rowStart;
var tableContainer = $("#tableContainer")
tableContainer.delegate("td", "mousedown", function() {
//Clear Selection
tableContainer.find("td.selected").removeClass("selected");
$(this).addClass("selected");
colStart = $(this).index();
rowStart = $(this).parents("tr").index();
selecting = true;
}).delegate("td", "mouseover", function() {
if (selecting) {
//Clear Selection
tableContainer.find("td.selected").removeClass("selected");
var theCell = $(this);
// Get the row and column numbers of the current cell
var colEnd = theCell.index();
var rowEnd = theCell.parents("tr").index();
// Account for rowEnd being smaller than rowStart
var rowSliceStart = Math.min(rowStart, rowEnd);
var rowSliceEnd = Math.max(rowStart, rowEnd);
tableContainer.find("tr").slice(rowSliceStart, rowSliceEnd + 1).each(function() {
var colSliceStart = Math.min(colStart, colEnd);
var colSliceEnd = Math.max(colStart, colEnd);
// Add the required class to the children
$(this).children().slice(colSliceStart, colSliceEnd + 1).addClass("selected");
});
}
}).delegate("td", "mouseup", function() {
selecting = false;
});
});
誰もが、この機能のパフォーマンスを改善するための方法について何か提案がありますか?私は、クラスの追加/削除がパフォーマンス上のオーバーヘッドの大半を占めていると考えています。だから私は特にそこで効率を見つけることを望んでいます。
ニース。多分、選択されたセルのリストをキャッシュして、各マウスオーバーハンドラの呼び出し間でそれらを再度見つける必要を避けることができますか? – Ben
'$(" tr "、tableContainer)' – Ben
@Benはいのキャッシュを保持することもできますが、キャッシュすることは難しいですが、それは難しいですが、それを構築するにはOPまでです。しかし、ガベージコレクションの問題があります。 DOMで要素が削除されると、その要素に対応するキャッシュエントリも手動でゼロにする必要があります。そうしないと、メモリリークが発生します。 – Joseph