javascript - 当突出显示的行是表格主体中可见的最后一行时滚动表格

标签 javascript jquery html css

假设我有一个包含 20 行的表。默认情况下,第一行突出显示,屏幕中有 6 行可见。现在,通过使用向下箭头导航,突出显示的行会到达第 6 行并在屏幕上可见,但是当它到达第 7 行时,它现在会在屏幕上可见。所以我希望当高亮显示到第 6 行时,下一行表格应该在屏幕上可见。

这段代码将帮助您更好地理解我的问题。

$(document).ready(function(){

    var rowCount = $('#partyitem_table >tbody >tr').length;


    var $tbody = $("#partyitem_table tbody").on('click', 'tr', function() {
            highlight($(this));
    });

    function highlight($row) {
        if ($row.length) {
            $tbody.children().removeClass("highlight");
            $row.addClass('highlight');
        }
    }

    var firstrow = $tbody.find('tr').first();
    highlight(firstrow);



    /* Keydown event function to navigate the table row */
    $(document).keydown(function(e){

            switch(e.which){

                /* Up arrow */
                case 38:
                    var $prev = $tbody.find('.highlight').prev();
                    highlight($prev);

                    break;


                /* Down Arrow */
                case 40:
                    var $next = $tbody.find('.highlight').next();
                    highlight($next);

                    break;
            }
            /* End of Switch Case */
    });



});
.fixed_header{
width: 100%;
table-layout: fixed;
border-collapse: collapse;
}

.fixed_header tbody{
  display:block;
  width: 100%;
  overflow: auto;
  height: 255px;
}

.fixed_header thead tr {
   display: block;
}

.fixed_header thead {
  background: #e8e8e8;
}

.fixed_header th, .fixed_header td {
  padding: 5px;
  text-align: left;
  width: 200px;
}

.highlight{
    background-color: #3c8dbc;
    color: #FFF;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table id="partyitem_table" class="table table-bordered fixed_header">
  <thead>
    <tr>
      <th>Item Name</th>
      <th>Quantity</th>
      <th>Rate</th>
      <th>Date</th>
      <th>By</th>
      <th>Total</th>
      <th>SrNo</th>
      <th>BrandSrNo</th>
    </tr>
  </thead>
  <tbody id="table_body">
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
    <tr>
      <td>Item Name</td>
      <td>Quantity</td>
      <td>Rate</td>
      <td>Date</td>
      <td>By</td>
      <td>Total</td>
      <td>SrNo</td>
      <td>BrandSrNo</td>
    </tr>
  </tbody>
</table>

如有任何帮助,我们将不胜感激。

最佳答案

是的,我得到了答案。 scrollIntoView() 是用于在给定元素的可见区域滚动的函数。下面是代码。

On Keydown Event

/* Keydown event function to navigate the table row */
    $(document).keydown(function(e){

            switch(e.which){

                /* Up arrow */
                case 38:

                    var $prev = $tbody.find('.highlight').prev();
                    highlight($prev);


                    var table_row = document.getElementById('partyitem_table').rows;
                    var selected_row = $('.highlight').index();
                    table_row[selected_row+=1].scrollIntoView(false);

                    break;


                /* Down Arrow */
                case 40:

                    var $next = $tbody.find('.highlight').next();
                    highlight($next);


                    var table_row = document.getElementById('partyitem_table').rows;
                    var selected_row = $('.highlight').index();
                    table_row[selected_row+=1].scrollIntoView(false);

                    break;
            }
            /* End of Switch Case */
    }); 

关于javascript - 当突出显示的行是表格主体中可见的最后一行时滚动表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50187047/

相关文章:

javascript - 如何在对象内的某个键处开始循环?

php - 加密 Ajax 数据的最佳且最安全的方法是什么?

html - 如何使用 Angular View 中的内容创建 PDF?

html - HTML 和 CSS 只能创建一个自动忽略图像透明区域的叠加层吗?

javascript - Dragula 拖动嵌套图像不会保持样式

javascript - 3 JS LineBasicMaterial如何在3D轴上绘制简单的粗线?

javascript - 迭代 3800 条记录,在 IE 浏览器中花费太多时间

javascript - 如何获取刚刚创建的元素的 `id`?

javascript - 修复由强化检查标记的动态代码注入(inject)问题

java - 什么正则表达式将与 Java 的 "replaceAll"函数一起操作,以从 html 字符串中删除 <p> html 标签及其内容?