Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何确定行在数据表中是否可见_Javascript_Jquery_Datatables - Fatal编程技术网

Javascript 如何确定行在数据表中是否可见

Javascript 如何确定行在数据表中是否可见,javascript,jquery,datatables,Javascript,Jquery,Datatables,我试图找出如何确定一行在jquery数据表中是否可见 我希望能够使用pageup/down按钮导航datatables视口。当窗口分辨率更改时,数据表的视口高度也会更改。我需要确保没有一行只是部分显示,这样当我在表中向下翻页时,底部的行会完全而不是部分地显示到表的顶部 有什么想法吗? 提前谢谢 编辑:我正在使用的一些代码。请注意,我正在使用ScrollTo插件滚动到datatable中的特定tr makeTableScroller = function () {

我试图找出如何确定一行在jquery数据表中是否可见

我希望能够使用pageup/down按钮导航datatables视口。当窗口分辨率更改时,数据表的视口高度也会更改。我需要确保没有一行只是部分显示,这样当我在表中向下翻页时,底部的行会完全而不是部分地显示到表的顶部

有什么想法吗? 提前谢谢

编辑:我正在使用的一些代码。请注意,我正在使用ScrollTo插件滚动到datatable中的特定tr

                makeTableScroller = function () {
        offset = 0;
        return function (tableInfo) {
            var tableId = tableInfo.tableId;
            var containerTop = 0; 
            var containerBottom = containerTop + $(tableInfo.tableId).height();
            var tableHeight = containerTop + containerBottom;
            var totalItemsInTable = tableInfo.settings.fnRecordsDisplay();
            var totalAvailableRows = $(tableInfo.tableId).find('tr').length;
            var rowHeight = tableInfo.settings.oScroller.s.rowHeight;
            var scrollBy = Math.floor(tableHeight / rowHeight);
            scrollBy = Math.floor(totalAvailableRows / scrollBy);

            if (tableInfo.event.keyCode === KeyCodes.PageDown) {
                offset += scrollBy;
                console.log(offset);
            }
            else if (tableInfo.event.keyCode === KeyCodes.PageUp) {
                if (offset - scrollBy <= 1) {
                    offset = 1;
                }
                else {
                    offset -= scrollBy - 1;
                }
                if (offset === 1) {
                    $(tableId).scrollTop(offset);
                }
            }

            $(tableId).find('tr:eq(' + offset + ')').ScrollTo();
        }
    }
makeTableScroller=函数(){
偏移量=0;
返回函数(tableInfo){
var tableId=tableInfo.tableId;
var containerTop=0;
var containerBottom=containerTop+$(tableInfo.tableId).height();
var表格高度=容器顶部+容器底部;
var totalItemsInTable=tableInfo.settings.fnRecordsDisplay();
var totalAvailableRows=$(tableInfo.tableId).find('tr').length;
var rowHeight=tableInfo.settings.oScroller.s.rowHeight;
var scrollBy=数学地板(桌高/行高);
scrollBy=数学地板(totalAvailableRows/scrollBy);
if(tableInfo.event.keyCode===KeyCodes.PageDown){
偏移量+=滚动;
控制台日志(偏移量);
}
else if(tableInfo.event.keyCode===KeyCodes.PageUp){

如果(offset-scrollBy很久以前我做了同样的事情,我用箭头代替pageUp/Down:

// "open" is class that holds current row

// DOWN
if (e.keyCode === 40) {
  // move open class to next row in table
  $('.open').removeClass('open').next('tr').addClass('open');

  // get vertical position of current body scroll
  var scrollY = $(window).scrollTop();

  // get vertical position of current row
  var scrollTrY = $('.open').offset().top;

  // height of window visible part
  var height = $(window).height();

  // height of current row
  var trHeight = $('.open').height();

  // check if are going to element that is not visible
  if ((scrollTrY + trHeight) > (scrollY + height)) {
    // condision is meet, we need to scroll to that row

    // menu height
    var menuOffset = 0;

    // calculate new position
    var newScrollPos = (scrollTrY - menuOffset) + 'px';

    $('body,html').animate({
      scrollTop: newScrollPos
    });
  }

  return false;
}

// Do the same thing for up key event
将其置于关键事件功能中:

$(window).keydown(function(e) {
...
}
下面是整个示例(使用向下和向上箭头,但首先单击表格以获得焦点):

jQuery(文档).ready(函数($){
$('#示例')。数据表({
分页:false
});
//将打开标志设置为第一行
如果($('.open')。长度==0){
$('.odd:first').addClass('open');
}
//关键事件
$(窗口).keydown(函数(e){
//向下
如果(例如keyCode===40){
//将打开的类移动到表中的下一行
$('.open').removeClass('open').next('tr').addClass('open');
//获取当前主体滚动的垂直位置
var scrollY=$(window.scrollTop();
//获取当前行的垂直位置
var scrollTrY=$('.open').offset().top;
//窗口可见部分的高度
var height=$(window.height();
//当前行的高度
var trHeight=$('.open').height();
//检查是否要访问不可见的元素
如果((滚动尝试+滚动高度)>(滚动+高度)){
//条件满足,我们需要滚动到该行
console.log(滚动,高度);
//菜单高度
var menuOffset=0;
//计算新位置
var newscorlpos=(scrollTrY-menuOffset)+“px”;
$('body,html')。设置动画({
滚动顶端:newScrollPos
});
}
返回false;
}
//现在对up key事件执行相同的操作
//向上
如果(例如keyCode===38){
$('.open').removeClass('open').prev('tr').addClass('open');
var scrollY=$(window.scrollTop();
var scrollTrY=$('.open').offset().top;
var height=$(window.height();
var trHeight=$('.open').height();
//菜单高度
var menuOffset=0;
if(scrollTrY-menuOffset
正文{
高度:1000px;
}
.打开{
背景色:黄色!重要;
}
.开放运输署{
背景色:黄色!重要;
}

名称
位置
办公室
年龄
开始日期
薪水
名称
位置
办公室
年龄
开始日期
薪水
老虎尼克松
系统架构师
爱丁堡
61
2011/04/25
$320,800
加勒特温特斯
会计
东京
63
2011/07/25
$170,750
阿什顿考克斯
初级技术作者
旧金山
66
2009/01/12
$86,000
塞德里克·凯利
高级Javascript开发人员
爱丁堡
22
2012/03/29
$433,060
佐藤航空
会计
东京
33
2008/11/28
$162,700
布里尔·威廉姆森
集成专家
纽约
61
2012/12/02
$372,000
赫罗德·钱德勒
营业员
旧金山
59
2012/08/06
$137,500
罗娜·戴维森
集成专家
东京
55
2010/10/14
$327,900
科琳赫斯特
Javascript开发人员
旧金山
39
2009/09/15
$205,500
索尼娅·弗罗斯特
软件工程师
爱丁堡
23
2008/12/13
$103,600
杰娜·盖恩斯
办公室经理
伦敦
30
2008/12/19
$90,560
奎因·弗林
支撑导线
爱丁堡
22
2013/03/03
$342,000
查尔德·马歇尔
区域主任
旧金山
36
2008/10/16
$470,600
海莉·肯尼迪
高级市场设计师
伦敦
43
2012/12/18
$313,500
塔蒂亚娜·菲茨帕特里克
区域主任
伦敦
19
2010/03/17
$385,750
迈克尔·席尔瓦
营销设计师
伦敦
66
2012/11/27
$198,500
柏德
首席财务官(CFO)
纽约
64
2010/06/09
$725,000
格洛丽亚·利特尔
系统管理员
纽约
59