我有一个表中有大量不适合分页的行。表行排序和字符串性能
row.sortKey = $(row).children('td').eq(column).text().toUpperCase();
:本表中的行可以通过点击列标题触发基于
http://www.exforsys.com/tutorials/jquery/jquery-basic-alphabetical-sorting.html客户机侧排序algoritm的函数动态地增加了一个“的expando”属性的每一行,从而高速缓存密钥预排序进行排序
正如您所看到的,属性值只是设置为被点击的列的内容,并且一旦排序完成,它们将被丢弃(空值)。性能实际上非常好 - 但包含更多文本的列似乎排序较慢。
由于排序只是为了让用户更容易找到他们正在查找的行,我认为通过用substr(0,7)或其他东西来裁剪关键值可以加快速度。 (八个字应该提供足够的精度)。然而,我发现做一个substr()会比保存更多的性能成本,并且如果有的话会使排序变慢。
有没有人知道可以应用于此方法的任何(其他)优化?
下面是一个更完整的例子:
var rows = $table.find('tbody > tr').get();
$.each(rows, function(index, row) {
row.sortKey = $(row).children('td').eq(column).text().toUpperCase()
})
rows.sort(function(a, b) {
if (a.sortKey < b.sortKey) return -1
if (a.sortKey > b.sortKey) return 1
return 0
})
$.each(rows, function(index, row) {
$table.children('tbody').append(row)
row.sortKey = null
})
编辑:这里是我的代码的最终版本,集成了许多的答案下面提供的最佳化的:
$('table.sortable').each(function() {
var $table = $(this);
var storage = new Array();
var rows = $table.find('tbody > tr').get();
$('th', $table).each(function(column) {
$(this).click(function() {
var colIndex = this.cellIndex;
for(i=0;i<rows.length;i++) {
rows[i].sortKey = $(rows[i].childNodes[colIndex]).text().toUpperCase();
}
rows.sort(function(a, b) {
if (a.sortKey < b.sortKey) return -1;
if (a.sortKey > b.sortKey) return 1;
return 0;
});
for(i=0;i<rows.length;i++) {
storage.push(rows[i]);
rows[i].sortKey = null;
}
$table.children('tbody').append(storage);
});
});
});
这听起来像一个好主意,会有一个去看看我能想出什么! – 2009-04-08 14:47:02