最大 60 行、最大 50 列の html テーブルを表示するという確固たるビジネス要件を持つアプリケーションに取り組んでいます。
理想的には、ユーザーが個々のテーブル セルを選択するか、クリック アンド ドラッグして複数のセルを選択できるようにします。
私の問題は、現時点では 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;
});
});
この関数のパフォーマンスを改善する方法について何か提案はありますか? クラスの追加/削除がパフォーマンスのオーバーヘッドのほとんどを占めていると思うので、特に効率化を期待しています。