问题描述:

I have spent HOURS trying to figure this out. I need to make a table that is virtually identical to the one that is being displayed at this link:

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

Where it scrolls both vertically and horizontally, while keeping a column fixed to the side. Ultimately, I'd like to have the right column fixed instead of the left, but that's not really my problem at the moment.

My problem is that despite having functional .js, that sorts the columns and pretty much does everything it's supposed to, and even using identical CSS, the middle container - the one that is supposed to horizontally scroll - doesn't. The vertical scroll is working just fine. It's clearly working in the example and the .js is pretty much supposed to handle everything once the table is built. Right now, I just want to get it working before even trying to switch from the left to the right column. If you can help me with that at the same time, all the better, but as I said, not what is currently vital.

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>

Here's a jsfiddle to kind of show the problem. Oddly enough, the hoz-scroll actually shows up in this (it's completely absent in my local example), but it still isn't allowing the left (Rendering Engine) Columns to stay put, and extends the entire table, which as you can see in the example link, it should not do.

I should also mention that this is being done in a Bootstrap environment and from what I've read so far, dataTables and Bootstrap should work together fairly well. I thought there might be a style somewhere that is disabling the horizontal scroll but I've not yet found any discrepancies.

Also, upon further inspection, there is supposed to be a class="DTFC_LeftWrapper" on that far left column that is not showing up in the jsfiddle example, which is probably why the hoz-bar extends all of the way to the left. I don't know why it wouldn't show up there, but does in local files as well as in the example link.

From what I've been able to ascertain, the table within the class="dataTables_scrollBody" isn't extending beyond the div it's encased in class="dataTables_scroll" which also appears to be absent from the jsfiddle version. On the local version, any attempts to force it outside, only widens the width of the div.

I don't know, I'm just trying to give you as much as I can to go on.

Any help with this would be greatly appreciated.

网友答案:

I think you need to set how many columns are to be fixed in your initializer...

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

this info is from http://www.datatables.net/extras/fixedcolumns/options

网友答案:

Thanks @Biggest, your point about bootstrap table widths lead to our solution. In chrome, at least, auto doesn't work, but none does, so we just added this to our .less sheets:

table{
  max-width: none
}
网友答案:

Recent versions of JQuery have deprecated $.browser. Actively developed plugins have included checks to the effect of if($.browser && $.browser.msie)) rather than if($.browser.msie)). You can fix your problem, by one of

  1. Include $.browser in your project.

  2. Use an older version of JQuery.

  3. Patch FixedColumns.js with $.browser checks like everyone else.

Your jsfiddle works when using an older version of JQuery.

相关阅读:
Top