简体   繁体   English

如何使用javascript / jquery使屏幕外的表行不可见

[英]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> 


Alternative Solution 替代解决方案

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.

相关问题 如何使用Jquery或Javascript重新排序表行 - How to reorder table rows using Jquery or Javascript 如何使用JavaScript显示/隐藏隐藏的HTML表行(没有jQuery) - How to show/hide hidden HTML table rows using JavaScript (no jQuery) 如何使用jquery或javascript快速对html表的1000行进行排序 - how to sort 1000 of rows of html table using jquery or javascript fast Javascript / jQuery:如何动态地向表体添加行(使用数组) - Javascript / jQuery: How to dynamically add rows to table body (using arrays) Javascript:通过隐藏行使表垂直适合屏幕 - Javascript: Make table fit on screen vertically by hiding rows 使用jQuery TableDnD插件拖放表行如何使某些ros无法拖动并保存已排序的行? - drag and drop of table rows using jquery TableDnD plugin how to make some ros not dragable and save the sorted rows? 有没有一种方法可以使用javascript或Jquery在该计算机上找出某人的屏幕宽度? - Is there a way to find out the width of someones screen on there computer using javascript or Jquery? 使用jQuery过滤表行的更优雅的方法吗? - More elegant way to filter out table rows using jQuery? 使用javascript或jquery根据表头列对表行进行排序 - Sorting table rows according to table header column using javascript or jquery 如何在不使用 jquery 但使用 javascript 的情况下使 ajax 每 (n) 秒更新一次? - How make ajax update every (n) number of seconds with out using jquery but using javascript?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM