【发布时间】:2012-06-28 16:22:42
【问题描述】:
我有一个大表,其中列出了大约 50 个用户和一些关于他们帐户的简单数据,包括他们拥有的“项目”数量。单击用户行时,下方会展开更多行以显示有关其每个项目的详细信息。大多数用户的项目少于 20 个,因此对浏览器的负担并不大。但是,有一些用户拥有 100 多个项目(一个拥有 500 多个项目),当单击用户行时,浏览器会停顿 1-4 秒。
表行设置为默认隐藏任何具有.project 类的行,并且当单击用户行(无.project 类)时,所有具有.project 类的后续行都具有该类.open 添加显示它们。
关于如何使这个运行更快的建议?有没有更好、更清洁的方法来达到同样的效果?
这是 HTML 的简化版本:
<table>
<tr>
<td>Username</td><td>Email</td><td>10 Projects</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr>
<td>Username</td><td>Email</td><td>3 Projects</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
<tr class="project">
<td> </td><td> </td><td>Project Name</td>
</tr>
</table>
... 和 JS:
(function($) {
$.fn.viewProjects = function() {
this.each(function() {
$(this).click(function(){
var projects = $(this).nextUntil(':not(.project)'); // get all rows that follow and have the '.project' class
if ($(this).hasClass('focused')) { // collapse
$(this).removeClass('focused');
projects.each(function(n, proj){
$(proj).removeClass('open');
});
}
else { // expand
$(this).addClass('focused');
projects.each(function(n, proj){
$(proj).addClass('open');
});
}
});
});
};
$('tr:not(.project)').viewProjects();
})(jQuery);
【问题讨论】:
-
您是否考虑过或愿意对结果进行分页?也就是说,在给定时间只显示 20 个用户项目..
-
分页是另一种解决方案 - 好主意@happytimeharry