約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);