jQuery 数据表标题与垂直滚动不对齐
我已将其发布在 datatables.net 论坛中,但一周后,仍然没有回复。希望我可以在这里找到帮助...
我正在使用数据表版本 1.8.1,并且在启用垂直滚动的情况下对列标题对齐进行噩梦。
使用下面发布的代码,标题在 Firefox 和 IE8 和 IE9 中正确排列,但 Chrome 和 IE7 则关闭。我在这个项目中使用了很多数据表,这对每个数据表来说都是一个问题。我非常需要帮助!
编辑:我发现这与设置表格的宽度有关。数据表采用其容器的宽度。如果我不设置宽度,一切都会很好地排列(但是表格对于我在页面上需要的位置来说太大了)。如果我给表格的 div(或更高位置的父 div)提供宽度,则标题将无法正确对齐。
谢谢!
截图:
www.dennissheppard.net/firefox_alignment.png
www.dennissheppard.net/chrome_alignment.png
www.dennissheppard.net/ie7_alignment.png
otable = $('#order_review_grid').dataTable({
'fnRowCallback': function (nRow, strings, displayIndex, dataIndex) {
return formatRow(nRow, dataIndex);
},
'fnDrawCallback':function()
{
checkIfOrderSubmitted(this);
},
'aoColumnDefs':
[
{ 'bVisible': false, 'aTargets': [COL_PRODUCT] },
{ 'bSortable': false, 'aTargets': [COL_IMAGE, COL_DELETE] },
{ 'sClass': 'right_align', 'aTargets': [COL_PRICE] },
{ 'sClass': 'center_align', 'aTargets': [COL_BRAND,COL_PACK] },
{ 'sClass': 'left_align', 'aTargets': [COL_DESCRIPTION] }
],
'sDom': 't',
'sScrollY':'405px',
'bScrollCollapse':true,
'aaSorting':[]
});
<table id="order_review_grid" class="grid_table" cellpadding="0px" cellspacing="0px">
<thead class="grid_column_header_row" id="order_review_grid_column_header_row">
<tr>
<td class="" id='sequenceNumber'>SEQ #</td>
<td class="grid_sc_header" id='statusCode'>Sc</td>
<td class="grid_sc_header" id='onOrderGuide'>O.G.</td>
<td class="grid_image_header" id='image'>Image</td>
<td class="grid_description_header" id='description'>Description</td>
<td class="grid_brand_header" id='label'>Brand</td>
<td class="grid_pack_header" id='packSize'>Pack</td>
<td class="grid_price_header" id='price'>Price</td>
<td class="grid_qtrfull_header" id='caseQuantity'>Full</td>
<td class="grid_qtrypart_header" id='eachQuantity'>Partial</td>
<td class="grid_refnum_header" id='referenceNumber'>Ref #</td>
<td class="grid_refnum_header"> </td>
</tr>
</thead>
<tbody class="">
<!-- loaded data will go here -->
</tbody>
</table>
I've posted this in the datatables.net forums, but after a week, still no response. Hopefully I can find help here...
I'm using datatables version 1.8.1 and am having nightmares over column header alignment with vertical scrolling enabled.
With the code posted below, the headers line up correctly in Firefox and IE8 and IE9, but Chrome and IE7 are off. I'm using a lot of datatables on this project, and this is a problem with every one. I'm desperate for help!
EDIT: I have figured out that this has something to do with setting the width of the table. The datatable takes the width of its container. If I set no width, everything lines up fine (but the table is too big for where I need it on the page). If I give the table's div (or a parent div somewhere higher up) a width at all, the headers don't line up properly.
Thanks!!
Screenshots:
www.dennissheppard.net/firefox_alignment.png
www.dennissheppard.net/chrome_alignment.png
www.dennissheppard.net/ie7_alignment.png
otable = $('#order_review_grid').dataTable({
'fnRowCallback': function (nRow, strings, displayIndex, dataIndex) {
return formatRow(nRow, dataIndex);
},
'fnDrawCallback':function()
{
checkIfOrderSubmitted(this);
},
'aoColumnDefs':
[
{ 'bVisible': false, 'aTargets': [COL_PRODUCT] },
{ 'bSortable': false, 'aTargets': [COL_IMAGE, COL_DELETE] },
{ 'sClass': 'right_align', 'aTargets': [COL_PRICE] },
{ 'sClass': 'center_align', 'aTargets': [COL_BRAND,COL_PACK] },
{ 'sClass': 'left_align', 'aTargets': [COL_DESCRIPTION] }
],
'sDom': 't',
'sScrollY':'405px',
'bScrollCollapse':true,
'aaSorting':[]
});
<table id="order_review_grid" class="grid_table" cellpadding="0px" cellspacing="0px">
<thead class="grid_column_header_row" id="order_review_grid_column_header_row">
<tr>
<td class="" id='sequenceNumber'>SEQ #</td>
<td class="grid_sc_header" id='statusCode'>Sc</td>
<td class="grid_sc_header" id='onOrderGuide'>O.G.</td>
<td class="grid_image_header" id='image'>Image</td>
<td class="grid_description_header" id='description'>Description</td>
<td class="grid_brand_header" id='label'>Brand</td>
<td class="grid_pack_header" id='packSize'>Pack</td>
<td class="grid_price_header" id='price'>Price</td>
<td class="grid_qtrfull_header" id='caseQuantity'>Full</td>
<td class="grid_qtrypart_header" id='eachQuantity'>Partial</td>
<td class="grid_refnum_header" id='referenceNumber'>Ref #</td>
<td class="grid_refnum_header"> </td>
</tr>
</thead>
<tbody class="">
<!-- loaded data will go here -->
</tbody>
</table>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(21)
我这里也有同样的问题。它在 Mozilla Firefox、Opera 中工作正常(像素完美列对齐),但在 Chrome 21 中不行。
解决方案:
就像这篇文章中提到的http://datatables.net/forums/discussion/3835/width-columns- chrome-safari/p1 中的问题
有趣的是,在我添加 setTimeout 并执行后,仍然有一列未对齐。添加“sScrollX”:“100%”后,
“sScrollXInner”:“100%”所有列均对齐(像素完美)。
Chrome/Chromium 的解决方案,FF、Opera、IE9 中的源代码:
I'm having the same problem here. It works fine (pixel-perfect column aligned) in Mozilla Firefox, Opera but not in Chrome 21.
Solution:
Like mentioned in this post http://datatables.net/forums/discussion/3835/width-columns-problem-in-chrome-safari/p1
The interesting part is that after I added setTimeout and after it executed there was still one column not aligned. After adding "sScrollX": "100%",
"sScrollXInner": "100%" all columns were aligned (pixel-perfect).
Solution for Chrome/Chromium, works ofcource in FF, Opera, IE9:
我通过使用带有溢出:auto的div包装“dataTable”表解决了这个问题,
并在dataTable初始化后添加这个JS
不要使用sScrollX或sScrollY,删除然后自己添加一个div包装器,它可以做同样的事情。
I solved this problem by wrapping the "dataTable" Table with a div with overflow:auto
and add this JS after your dataTable initialization
Dont use sScrollX or sScrollY, remove then and add a div wrapper yourself which does the same thing.
我遇到了这个问题,结果发现这是我的 CSS 的副作用。尝试禁用所有外部 CSS 并查看问题是否仍然存在。
I had the problem and it turned out to be a side effect with my CSS. Try to disable all external css and see if the problem persists.
对我来说非常完美!
Worked perfect for me!
我遇到了类似的问题,但我的在搜索或排序或与表格交互后调整大小以导致重绘,尝试了重绘...功能,但最终没有临时凑合。对我有用的有趣修复是以相同的顺序调用
oTable.fnFilter( "x",0 )
和oTable.fnFilter( "",0 )
(搜索并清除搜索)...这有效...哈哈..:)I had a similar issue, but mine resizes to fit after searching or sorting or interacting with the table in a way to cause a redraw, tried the redraw...function but no luck had to improvise in the end. The funny fix I that worked for me was calling
oTable.fnFilter( "x",0 )
andoTable.fnFilter( "",0 )
in this same order (search and clear search)... this works...lol.. :)这可能会帮助您(不确定,但我想值得尝试)
页面
将此代码添加到从这里获取的
Chrome 中的宽度列问题Safari
另外,我想值得尝试仅在构造函数中定义列,而不是在(将标签留空)中定义它们
this might help you (not sure but i guess that its worth trying)
add this code to the page
taken from here
width columns problem in Chrome & Safari
Also, i guess it worth trying to define the columns in the constructor only instead of defining them in the (leave tag empty)
我也遇到了这个问题。经过多次不同的尝试后,我尝试了以下方法并成功了。
我尝试在 style 属性中添加带有 float 属性的标签标记。然后就找到了。
例如:
I also had this problem. After many different tries I tried the below and succeeded.
I tried adding label tag with the float property in the style attribute. Then it worked find.
For example:
我遇到一个问题,列中的数据太大而无法容纳,并且数据中没有换行符。我的解决方案是添加一个带有溢出和标题属性的 div,如下所示:
这导致表格几乎完全稳定下来。
I had a problem where the data in the columns was too large to fit and there was no place in the data for a line break. My solution was to add a div with an overflow and a title attribute like this:
This caused the table to settle down almost completely.
如果您正在使用引导程序:
if you are using bootstrap:
这就是我摆脱这个问题的方法:
完成 Ajax 调用后执行函数
我通常使用它在视图中
:其中 tbl 存储数据表对象。
This is how I have got rid of this problem:
I use this generally to execute functions after a Ajax call has been completed
in the view:
where tbl stores the datatable object.
在 Firefox 中也遇到同样的问题,
我像这样改变了一点jquery脚本(在jquery.dataTables.js版本1.9.4中):
即使在排序和过滤之后它也能工作。
Having the same problem in firefox,
I changed a little the script jquery like this (in jquery.dataTables.js version 1.9.4) :
It works even after sorting and filtering.
我使用 bootstrap 并用它来管理
I use bootstrap and I managed with this
我在 Bootstrap 3 中遇到了这个问题,该问题与我在应用 Bootstrap 样式后添加的 th 和 td 元素上的左右填充有关。删除我的左右填充解决了我的情况的问题。
I had this problem with bootstrap 3 and the problem was related to left and right padding on my th and td elements that I added after the bootstrap styling was applied. Removing my left and right padding fixed the problem in my case.
我们可以使用 css 和 sDom 中的微小更改来处理此问题。
在 css 文件中添加以下类,
将表的 sDom 属性中的“t”替换为 <"scrollDiv"t>并删除表的scrollX属性
保存并享受! :)
We can handle this using css and minor changes in sDom.
Add following class in your css file
replace your 't' in sDom attribute of table with <"scrollDiv"t> and remove scrollX attribute of table
Save and Enjoy ! :)
我发现宽度在第一个窗口滚动中会错位,因此解决方案是在第一个滚动时仅请求新的表格绘制。
编辑:也可与
setTimeout
函数配合使用。这取决于错位发生的时间。$table.tables().draw()
是这里的关键。I found that the width would misalign in the first window scroll, so the solution is to, on the first scroll only request a new table draw.
Edit: Also works with a
setTimeout
function. This depends when the misaligning happens.$table.tables().draw()
is the key here.我也面临同样的问题。我通过从数据表属性中删除
'sScrollY':'405px'
并使用 fixed 解决了这个问题标题。I too faced the same issue. I solved it by removing
'sScrollY':'405px'
from the datatable property and used fixed header.JS
然后在 gridview 上方添加一个 div 元素,如下所示。
JS
Then above your gridview add a div element as below.
不确定我是否有完全相同的问题。我正在处理一个非常大的表,有 40 多列,并且使用水平和垂直滚动。但是,如果浏览器窗口设置得很大,以至于您可以看到整个表格,则列标题左对齐,表格内容位于中间。
我注意到在 Firebug 中,通过 DataTables 表格的宽度已达到 1352px。将其设置为 100% 使一切都一致!
Not sure if I had the exact same problem. I was dealing with a very large table, 40+ columns, and was using horizontal and vertical scrolling. However, if the browser window was set so big that you could see the whole table, the column headings were left aligned and the table content was in the center.
I noticed in firebug that the table had gotten a width of 1352px through DataTables. Setting that to 100% made everything line up!
我知道这是相当老的线程,但我在搜索标题对齐问题时来到这里。结果我需要一个不同的解决方案,所以在这里发布,以便有人会发现它有用。
我刚刚在样式块中添加了以下内容,它解决了问题:
似乎数据表添加了固定布局,因此添加此行使我的标题在滚动时与数据正确对齐
I know this is quite old thread, but I landed here when searching for the header alignment issue. Turned out I needed a different solution, so posting here so that someone will find it useful.
I just added following in my style block and it solved the issue:
Seems that Datatables adds fixed layout, so adding this line made my headers align correctly with data when scrolling
经过长时间的努力,我设法调整它:
并避免启用“scrollCollapse”
After a long struggle I managed to tweak it:
and also avoid enabling "scrollCollapse"