dataTables - 无法获得水平滚动和固定列来完成他们的工作。似乎到处渲染不同。我究竟做错了啥?

Posted

技术标签:

【中文标题】dataTables - 无法获得水平滚动和固定列来完成他们的工作。似乎到处渲染不同。我究竟做错了啥?【英文标题】:dataTables - Can't get horizontal scroll & fixed column to do their job. Seems to render differently everywhere. What am I doing wrong?dataTables - 无法获得水平滚动和固定列来完成他们的工作。似乎到处渲染不同。我究竟做错了什么? 【发布时间】:2013-02-06 03:28:07 【问题描述】:

我花了几个小时试图弄清楚这一点。我需要制作一个与此链接上显示的表格几乎相同的表格:

https://datatables.net/extensions/fixedcolumns/

它可以垂直和水平滚动,同时保持一列固定在侧面。最终,我希望固定右列而不是左列,但这不是我目前的问题。

我的问题是,尽管有功能性的 .js,它对列进行排序并且几乎完成了它应该做的所有事情,即使使用相同的 CSS,中间容器 - 应该水平滚动的容器 - 却没有。垂直滚动工作得很好。它显然在示例中工作,并且一旦构建表,.js 几乎应该处理所有事情。现在,我只想在尝试从左列切换到右列之前让它工作。如果你能同时帮助我,那就更好了,但正如我所说,不是目前最重要的。

http://jsfiddle.net/biggest/WCpYx/6/

//jquery
$(document).ready( function () 
var oTable = $('#example').dataTable( 
    "sScrollY": "300px",
    "sScrollX": "100%",
    "sScrollXInner": "150%",
    "bScrollCollapse": true,
    "bPaginate": false
 );
new FixedColumns( oTable );
 );

//html
<div id="container" style="width: 700px;">
<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>
<tfoot>
    <tr>
        <th>Rendering engine</th>
        <th>Browser</th>
        <th>Platform(s)</th>
        <th>Engine version</th>
        <th>CSS grade</th>
    </tr>
</tfoot>
<tbody>
    <tr class="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="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="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>
    <tr class="gradeA">
        <td>Trident</td>
        <td>Internet Explorer 6</td>
        <td>Win 98+</td>
        <td class="center">6</td>
        <td class="center">A</td>

    </tr>
    <tr class="gradeA">
        <td>Trident</td>
        <td>Internet Explorer 7</td>
        <td>Win XP SP2+</td>
        <td class="center">7</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Trident</td>
        <td>AOL browser (AOL desktop)</td>
        <td>Win XP</td>
        <td class="center">6</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Firefox 1.0</td>
        <td>Win 98+ / OSX.2+</td>
        <td class="center">1.7</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Firefox <br>1.5</td>
        <td>Win 98+ / OSX.2+</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Firefox 2.0</td>
        <td>Win 98+ / OSX.2+</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Firefox 3.0</td>
        <td>Win 2k+ / OSX.3+</td>
        <td class="center">1.9</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Camino 1.0</td>
        <td>OSX.2+</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Camino 1.5</td>
        <td>OSX.3+</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Netscape 7.2</td>
        <td>Win 95+ / Mac OS 8.6-9.2</td>
        <td class="center">1.7</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Netscape Browser 8</td>
        <td>Win 98SE+</td>
        <td class="center">1.7</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Netscape Navigator 9</td>
        <td>Win 98+ / OSX.2+</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.0</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">1</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.1</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">1.1</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.2</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">1.2</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.3</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">1.3</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.4</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">1.4</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.5</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">1.5</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.6</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">1.6</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.7</td>
        <td>Win 98+ / OSX.1+</td>
        <td class="center">1.7</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Mozilla 1.8</td>
        <td>Win 98+ / OSX.1+</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Seamonkey 1.1</td>
        <td>Win 98+ / OSX.2+</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Gecko</td>
        <td>Epiphany 2.20</td>
        <td>Gnome</td>
        <td class="center">1.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Webkit</td>
        <td>Safari 1.2</td>
        <td>OSX.3</td>
        <td class="center">125.5</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Webkit</td>
        <td>Safari 1.3</td>
        <td>OSX.3</td>
        <td class="center">312.8</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Webkit</td>
        <td>Safari 2.0</td>
        <td>OSX.4+</td>
        <td class="center">419.3</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Webkit</td>
        <td>Safari 3.0</td>
        <td>OSX.4+</td>
        <td class="center">522.1</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Webkit</td>
        <td>OmniWeb 5.5</td>
        <td>OSX.4+</td>
        <td class="center">420</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Webkit</td>
        <td>iPod Touch / iPhone</td>
        <td>iPod</td>
        <td class="center">420.1</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Webkit</td>
        <td>S60</td>
        <td>S60</td>
        <td class="center">413</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera 7.0</td>
        <td>Win 95+ / OSX.1+</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera 7.5</td>
        <td>Win 95+ / OSX.2+</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera 8.0</td>
        <td>Win 95+ / OSX.2+</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera 8.5</td>
        <td>Win 95+ / OSX.2+</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera 9.0</td>
        <td>Win 95+ / OSX.3+</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera 9.2</td>
        <td>Win 88+ / OSX.3+</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera 9.5</td>
        <td>Win 88+ / OSX.3+</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Opera for Wii</td>
        <td>Wii</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Nokia N800</td>
        <td>N800</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>Presto</td>
        <td>Nintendo DS browser</td>
        <td>Nintendo DS</td>
        <td class="center">8.5</td>
        <td class="center">C/A</td>
    </tr>
    <tr class="gradeC">
        <td>KHTML</td>
        <td>Konqureror 3.1</td>
        <td>KDE 3.1</td>
        <td class="center">3.1</td>
        <td class="center">C</td>
    </tr>
    <tr class="gradeA">
        <td>KHTML</td>
        <td>Konqureror 3.3</td>
        <td>KDE 3.3</td>
        <td class="center">3.3</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeA">
        <td>KHTML</td>
        <td>Konqureror 3.5</td>
        <td>KDE 3.5</td>
        <td class="center">3.5</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeX">
        <td>Tasman</td>
        <td>Internet Explorer 4.5</td>
        <td>Mac OS 8-9</td>
        <td class="center">-</td>
        <td class="center">X</td>
    </tr>
    <tr class="gradeC">
        <td>Tasman</td>
        <td>Internet Explorer 5.1</td>
        <td>Mac OS 7.6-9</td>
        <td class="center">1</td>
        <td class="center">C</td>
    </tr>
    <tr class="gradeC">
        <td>Tasman</td>
        <td>Internet Explorer 5.2</td>
        <td>Mac OS 8-X</td>
        <td class="center">1</td>
        <td class="center">C</td>
    </tr>
    <tr class="gradeA">
        <td>Misc</td>
        <td>NetFront 3.1</td>
        <td>Embedded devices</td>
        <td class="center">-</td>
        <td class="center">C</td>
    </tr>
    <tr class="gradeA">
        <td>Misc</td>
        <td>NetFront 3.4</td>
        <td>Embedded devices</td>
        <td class="center">-</td>
        <td class="center">A</td>
    </tr>
    <tr class="gradeX">
        <td>Misc</td>
        <td>Dillo 0.8</td>
        <td>Embedded devices</td>
        <td class="center">-</td>
        <td class="center">X</td>
    </tr>
    <tr class="gradeX">
        <td>Misc</td>
        <td>Links</td>
        <td>Text only</td>
        <td class="center">-</td>
        <td class="center">X</td>
    </tr>
    <tr class="gradeX">
        <td>Misc</td>
        <td>Lynx</td>
        <td>Text only</td>
        <td class="center">-</td>
        <td class="center">X</td>
    </tr>
    <tr class="gradeC">
        <td>Misc</td>
        <td>IE Mobile</td>
        <td>Windows Mobile 6</td>
        <td class="center">-</td>
        <td class="center">C</td>
    </tr>
    <tr class="gradeC">
        <td>Misc</td>
        <td>PSP browser</td>
        <td>PSP</td>
        <td class="center">-</td>
        <td class="center">C</td>
    </tr>
    <tr class="gradeU">
        <td>Other browsers</td>
        <td>All others</td>
        <td>-</td>
        <td class="center">-</td>
        <td class="center">U</td>
    </tr>
</tbody>
</table>
</div>

这是一个显示问题的 jsfiddle。奇怪的是,hoz-scroll 实际上出现在此(在我的本地示例中完全不存在),但它仍然不允许左侧(渲染引擎)列保持不变,并扩展整个表格,您可以请参阅示例链接,它不应该这样做。

我还应该提到,这是在 Bootstrap 环境中完成的,从我目前所阅读的内容来看,dataTables 和 Bootstrap 应该可以很好地协同工作。我认为某处可能存在禁用水平滚动的样式,但我尚未发现任何差异。

此外,经过进一步检查,最左侧的列应该有一个 class="DTFC_LeftWrapper" 没有出现在 jsfiddle 示例中,这可能是 hoz-bar 一直延伸到左边。我不知道为什么它不会出现在那里,但会出现在本地文件以及示例链接中。

据我所知, class="dataTables_scrollBody" 中的表没有超出它包含在 class="dataTables_scroll" 中的 div,jsfiddle 版本中似乎也没有。在本地版本中,任何将其强制到外部的尝试只会扩大 div 的宽度。

我不知道,我只是想尽我所能给你继续前进。

对此的任何帮助将不胜感激。

【问题讨论】:

好的,解决时间。再次感谢下面的先生们,他们帮了大忙。我们想通了一些事情。正如我所怀疑的那样,Bootstrap 正在干扰,但不是我最初想的那样,即溢出在某处被覆盖。事实证明,bootstrap.css 有一个类集 'tablemax-width: 100%' 所以不会出现 hoz-scroll。我们将其更改为“自动”,瞧。此外,涉及“iColumns”的解决方案也有很大帮助。 次要编辑:与其将其设置为 auto (在 Firebug 中有效),不如从 CSS 中注册 max-width 。它显示为什么都没有。因此,在这种情况下,我们将最大宽度与我们在 jquery 中应用到 sScrollXInner 的百分比相匹配——在这种情况下为 150%。这很有效。 【参考方案1】:

我认为您需要在初始化程序中设置要修复的列数...

new FixedColumns( oTable, 
      "iLeftColumns": 0,
      "iRightColumns": 1
     );

此信息来自http://www.datatables.net/extras/fixedcolumns/options

【讨论】:

好东西也。它确实做了我正在寻找的事情,但它有点增加了它 - 例如,左列仍然是静态的,带有“iRight Columns”:1.我似乎无法找到它在哪里(如果)告诉如何禁用那个。 到目前为止,任何设置 "iColumns": 0(或任何数字)的尝试似乎都没有做任何事情,无论我使用哪个 jquery 版本。 您尝试过添加 iLeftColumns 吗?新的 FixedColumns(oTable, "iLeftColumns": 0, "iRightColumns": 1 ); 这是数据表示例datatables.net/release-datatables/extras/FixedColumns/… 我做到了。 iLeftColumns 仅用于完全打破列。我还没有完全弄清楚是什么导致了这种差异。也许它会在本地文件上翻译得更好,我还不确定,但在 jsfiddle 中,它不起作用。【参考方案2】:

感谢@Biggest,您关于引导表宽度的观点导致了我们的解决方案。至少在 chrome 中,auto 不起作用,但 none 起作用,所以我们只是将其添加到我们的 .less 工作表中:

table
  max-width: none

【讨论】:

我修改了它下面的“auto”注释。我的则相反,因为我们使用的是内部容器的百分比,所以我们只是匹配它,而不是什么都不做。但我很高兴最终能够帮助您找到解决方案。【参考方案3】:

最近版本的 JQuery 已弃用 $.browser。积极开发的插件包括检查if($.browser &amp;&amp; $.browser.msie)) 而不是if($.browser.msie))。您可以通过

之一解决您的问题

    在您的项目中包含$.browser。

    使用旧版本的 JQuery。

    像其他人一样使用 $.browser 检查修补 FixedColumns.js。

您的 jsfiddle 可以在使用旧版本的 JQuery 时工作。

【讨论】:

令人着迷,你是对的。明天我必须在我的本地副本上试试这个。但这为此事提供了相当多的启示。谢谢你。有什么想法可以在我进行此操作时交换列吗?请记住,我对这些东西还比较陌生。 lukeocom 似乎对 iColumns 的东西有所了解,但我还没有完全确定预期的结果。 datatables.net/extras/thirdparty/ColReorderWithResize 有一个用于交换列的插件。它可能遇到同样的$.browser 问题。

以上是关于dataTables - 无法获得水平滚动和固定列来完成他们的工作。似乎到处渲染不同。我究竟做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

滚动上的 Mui-datatables 固定列 - (左或右)

标题/数据列未与 jQuery dataTables、bootstrap 2.3.2 对齐并启用水平滚动

DataTables:如何将包装文本和水平滚动条放在一起

ElementUI el-table 固定列后,滚动条在固定列的位置上无法滚动的问题

php datatable固定住前几列为啥会有横向滚动条,怎么去掉呢?

jquery datatables 固定列在 IE 中未对齐