[英]How to make unvisible the rows of table that out of screen using javascript / jquery
I have a large table has 6K rows and its slowing down all functionality on page. 我有一个大表,有6K行,它减慢了页面上的所有功能。 I can't hide the rows with
display:none
because I have some jquery functions that gathering some info from all tr
's in table. 我无法使用
display:none
隐藏行,因为我有一些jquery函数可从表中所有tr
收集一些信息。 Is it possible to make unvisible the rows that out of screen and make visible some part of them when scrolling? 滚动时是否可以使不可见的行不可见并使其一部分可见? So page can speed up.
这样页面可以加快速度。
Rows: 行:
<tr id="mainD0002" class="locations">
<td>
<div class="media-left">
<div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div>
</div>
</td>
<td></td>
<td style="width: 200px">
<table width="100%" class="counttable">
<tbody>
<tr id="locationD0002" class="detailD0002">
<td align="right">
<ul class="ccontainer">
<li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li>
</ul>
</td>
</tr>
</tbody>
</table>
</td>
<td style="width: 50px;"><input type="text" class="controlin" value="0" tabindex="1"></td>
<td style="width: 50px;" class="text-center">
<ul class="icons-list">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a>
<ul class="dropdown-menu dropdown-menu-right">
<li><a href="#" class="add"><i class="icon-download"></i> Add</a></li>
<li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li>
<li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li>
<li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li>
</ul>
</li>
</ul>
</td>
</tr>
Any advise will help a lot Thanks 任何建议都会有很大帮助
I'm not sure how much this will improve your performance, but it might be helpful. 我不确定这将在多大程度上提高您的性能,但这可能会有所帮助。
I have adapted a function from ADB's answer to another question which lets us check if an element is visible. 我已经将ADB的答案中的函数改编为另一个问题,该问题使我们可以检查某个元素是否可见。 If the row is not visible then it adds a class
.offscreen
to the row. 如果该行不可见,则向该行添加
.offscreen
类。 I have also added the class .hide_off
to all but the first td
of your rows. 除了行的第一个
td
,我还添加了.hide_off
类。
A little CSS allows us to hide all but the first column for rows that are not visible, but when you scroll they become visible. 一点CSS可以让我们隐藏除了第一列以外的所有不可见行,但是当您滚动它们时,它们将变为可见。
I haven't tested this with a large number of rows like you're suggesting... so am not sure if this will be any more efficient but it might be worth a try. 我没有像您建议的那样对大量的行进行过测试...因此不确定是否会更有效,但是可能值得尝试。
Update: As mentioned by charlietfl, the processing required for this is approach is excessive.
更新:正如charlietfl提到的,此方法所需的处理过多。 This answer isn't practical, but I'll leave it here incase anyone can cannibalise parts of it into something useful.
这个答案不切实际,但我将其保留在这里,以防任何人可以将其一部分蚕食成有用的东西。
If you don't need to see the information then I would suggest using Barmar's advice and simply hiding it permanently with display:none;
如果您不需要查看信息,那么我建议您使用Barmar的建议,并使用
display:none;
永久隐藏它display:none;
. 。
Hope it helps 希望能帮助到你
// Run function once page is loaded $(document).ready(function() { checkVisible(); }); // Run function after scrolling $(window).scroll(function() { checkVisible(); }); // Check if rows are visible function checkVisible() { var bottom_of_screen = $(window).scrollTop() + $(window).innerHeight(); var top_of_screen = $(window).scrollTop(); // Check each row $("tr").each(function() { // Adapted from ADB's answer - check if the element is visible var top_of_element = $(this).offset().top; var bottom_of_element = $(this).offset().top + $(this).outerHeight(); // If not visible then add 'offscreen' class to row if ((bottom_of_screen > top_of_element) && (top_of_screen < bottom_of_element)) { $(this).removeClass("offscreen"); } else { $(this).addClass("offscreen"); } }); }
tr.offscreen .hide_off { display: none; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> </table>
An easy alternative would be to add a click
event to each row in order to show the extra information. 一个简单的替代方法是向每行添加一个
click
事件,以显示额外的信息。 hover
would also work but then you would need to have a set height for the rows (ie the height of a row when everything is shown) or you'll have some UI issues. hover
也可以,但是您需要为行设置一个高度(即,显示所有内容时的行高度),否则会遇到一些UI问题。
This doesn't actually have the functionality you initially requested (ie elements appearing immediately on scroll), but is a low-resource alternative. 实际上,它没有您最初请求的功能(即,元素在滚动时立即显示),但是是资源贫乏的替代方法。
$("tr.locations").click( function() { $(this).toggleClass("show"); });
tr .hide_off { display: none; } tr.show .hide_off { display: inherit; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <table> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> <tr id="mainD0002" class="locations"> <td> <div class="media-left"> <div class="mainlocation"><b>DDSS001</b><br><span class="text-muted">D0002</span></div> </div> </td> <td></td> <td style="width: 200px" class="hide_off"> <table width="100%" class="counttable"> <tbody> <tr id="locationD0002" class="detailD0002"> <td align="right"> <ul class="ccontainer"> <li id="c576" class="ccount-576" data-sid="576"><span id="576span" class="approved badge badge-flat all">12</span> </li> </ul> </td> </tr> </tbody> </table> </td> <td style="width: 50px;" class="hide_off"><input type="text" class="controlin" value="0" tabindex="1"></td> <td style="width: 50px;" class="text-center hide_off"> <ul class="icons-list"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-expanded="false"><i class="icon-menu7"></i></a> <ul class="dropdown-menu dropdown-menu-right"> <li><a href="#" class="add"><i class="icon-download"></i> Add</a></li> <li><a href="#" class="discard"><i class="icon-file-text"></i> Discard</a></li> <li><a href="#" class="flush"><i class="icon-trash"></i> Flush</a></li> <li><a href="#" class="delete"><i class="icon-x"></i> Delete</a></li> </ul> </li> </ul> </td> </tr> </table>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.