数据表:更改表格的高度不起作用

Posted

技术标签:

【中文标题】数据表:更改表格的高度不起作用【英文标题】:Datatables: Change height of table not working 【发布时间】:2011-12-02 11:06:07 【问题描述】:

我正在使用带有 bPaginate = false 的 Jquery Datatables 表,并且 sScrollY 是一些固定高度。最终我希望表格在 window.resize 事件上调整大小。

为了让它工作,我构建了一个较小的测试用例:在下面的代码 sn-ps 中,我希望在单击按钮时调整表格的大小

html

<!DOCTYPE html>
<html>
<head>
<link class="jsbin" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/jquery-ui.min.js"></script>
<script type="text/javascript" language="javascript" src="http://www.datatables.net/release-datatables/media/js/jquery.dataTables.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
  <input id="button" type="button" value="Click me!" />
  <table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
    <thead>
        <tr>
            <th>Rendering engine</th>

            <th>Browser</th>
            <th>Platform(s)</th>
            <th>Engine version</th>
            <th>CSS grade</th>
        </tr>
    </thead>
    <tbody>
        <tr class="odd gradeX">
            <td>Trident</td>
            <td>Internet
                 Explorer 4.0</td>
            <td>Win 95+</td>
            <td class="center"> 4</td>
            <td class="center">X</td>

        </tr>
        <tr class="even gradeC">
            <td>Trident</td>
            <td>Internet
                 Explorer 5.0</td>
            <td>Win 95+</td>
            <td class="center">5</td>
            <td class="center">C</td>

        </tr>
        <tr class="odd gradeA">
            <td>Trident</td>
            <td>Internet
                 Explorer 5.5</td>
            <td>Win 95+</td>
            <td class="center">5.5</td>
            <td class="center">A</td>

        </tr>
    </tbody>
    <tfoot>
        <tr>
            <th>Rendering engine</th>
            <th>Browser</th>
            <th>Platform(s)</th>

            <th>Engine version</th>
            <th>CSS grade</th>
        </tr>
    </tfoot>
</table>
  </body>
</html>

Javascript:

$('#button').click(function() 
  console.log('Handler for .click() called.');
  table = $('#example').dataTable();
  settings = table.fnSettings();  
  console.log('old:' + settings.oScroll.sY);
  settings.oScroll.sY = '150px';
  console.log('new:' + settings.oScroll.sY);
  table.fnDraw(false);
);
$('#example').dataTable(
  "sScrollY": "350px",
  "bPaginate": false,
  "bJQueryUI": true
);

控制台输出如预期:

Handler for .click() called.
old:350px
new:150px

但是表格没有更新!知道我做错了什么吗?

可以在这里找到一个活生生的例子:http://jsbin.com/anegiw/12/edit

【问题讨论】:

这将重新初始化表,因此它可能适用于这个特定的 sn-p。但它是否适合 window.resize 事件处理程序,它在调整 broser 窗口大小期间被多次调用? 实际上,我刚刚在 window.resize 事件中尝试过:它可以工作,但速度非常慢,即使在现代机器上也是如此 【参考方案1】:

好吧,似乎工作得很好的是利用 datatbables 框架添加的元素:

$(window).resize(function() 
  console.log($(window).height());
  $('.dataTables_scrollBody').css('height', ($(window).height() - 200));
);

$('#example').dataTable(
  "sScrollY": ($(window).height() - 200),
  "bPaginate": false,
  "bJQueryUI": true
);

这个例子让表格随着窗口平滑地调整大小。

现场示例:http://jsbin.com/anegiw/18/edit

【讨论】:

【参考方案2】:

可能的情况是 sScrollY 值仅在初始化时设置表的大小,然后当您更改值时它不会驻留在表中。该值可能仅用于告诉数据表“在此数量的滚动呈现更多结果之后”,因此您可能必须创建一个更新 sScrollY 的外观,然后手动将该表的 css 宽度更新为所需的高度。

【讨论】:

这会解释很多,但还有其他问题,答案是它应该工作:***.com/questions/7634066/…【参考方案3】:

这为我解决了问题:

#data_wrapper.dataTables_wrapper

     height: 700px !important;
     background-color: #F1F1F1 !important;

#data_wrapper .fg-toolbar.ui-toolbar.ui-widget-header.ui-helper-clearfix.ui-corner-bl.ui-corner-br

       position: absolute;
       width: 100%;
       bottom: 0;

您可以根据记录的数量更改高度。

【讨论】:

以上是关于数据表:更改表格的高度不起作用的主要内容,如果未能解决你的问题,请参考以下文章

设置表格的 td 高度在 Firefox 中不起作用

更改 tableView 单元格的高度不起作用

CSS显示:表格单元格,设置高度和溢出:隐藏,不起作用?

Objective-C:动画高度约束更改不起作用

在 React Native Stack Navigator 中更改 Header 的高度不起作用

即使我在设计器中更改了高度,组合框下拉菜单也不起作用