Я обнаружил, что jquery.selectable очень медленно работает в старых браузерах (например, IE7 и 8), потому что он должен вызывать метод .offset () для каждого элемента. Я использовал его для ячеек таблицы, поэтому смог уменьшить количество вызовов .offset () до одного для каждой строки и одного для каждого столбца (вместо одного вызова для каждой ячейки), создав модифицированную версию плагин с измененной функцией обновления. Это сделало производительность приемлемой для больших таблиц. Массив cellPositions содержит горизонтальную позицию для каждого столбца.
this.refresh = function() {
var cellPositions = [];
var firstRow = true;
selecteeRows = $("tr", self.element[0]);
selecteeRows.each(function() {
var row = $(this);
// adding any filters here seems to slow down IE a lot
// self.options.filter is not used!!
var selecteeCells = $(row).find("td");
if (firstRow && selecteeCells.length > 0) {
for (var i = 0; i < selecteeCells.length; i++) {
cellPositions[i] = $(selecteeCells[i]).offset().left;
}
cellPositions[selecteeCells.length] = cellPositions[selecteeCells.length - 1] + $(selecteeCells).outerWidth(true);
firstRow = false;
}
if (selecteeCells.length > 0) {
var top = $(selecteeCells).first().offset().top;
var bottom = top + $(selecteeCells).first().outerHeight();
var i = 0;
selecteeCells.each(function() {
var $this = $(this);
first = false;
$.data(this, "selectable-item", {
element: this,
$element: $this,
left: cellPositions[i],
top: top,
right: cellPositions[i + 1],
bottom: bottom,
startselected: false,
selected: $this.hasClass('ui-selected'),
selecting: $this.hasClass('ui-selecting'),
unselecting: $this.hasClass('ui-unselecting')
});
i++;
});
}
});
};
Редактировать: Вот ссылка на код в github: https://github.com/dfjackson/jquery.ui.selectableTable