受Learning jQuery 1.3(第三版中没有)的第7章的启发,我整理了这个排序例程:
var rows = $table.find('tbody > tr').get();
$.each(rows, function(index, row) {
var $cell = $(row).children('td').eq(column);
$(row).data('sortKey',$cell);
});
rows.sort(function(a, b) {
if ($(a).data('sortKey') < $(b).data('sortKey'))
return -sortDirection;
if ($(a).data('sortKey') > $(b).data('sortKey'))
return sortDirection;
return 0;
});
但我不喜欢在每一行都使用$(a)
and $(b)
。
问:有没有办法可以缓存$(a)
和$(b)
?作者使用了他称之为expando的东西。
这种附加到 DOM 元素但不是普通 DOM 属性的属性称为 expando。这是存储键的方便位置,因为我们需要每个表行元素一个。现在,我们可以在比较器函数中检查这个属性,我们的排序明显更快。