【发布时间】:2016-09-03 02:50:06
【问题描述】:
我正在使用 Bootstrap 表创建一个类似电子表格的应用程序。用户可以切换列的可见性、添加/删除列、调整大小等。
当用户选择调整列大小以及添加新列时,我需要表格能够水平滚动,但 Bootstrap 会尝试将表格放入父容器中。一个基本的 Bootstrap 表:
<div class="wrapper">
<table id="grid" class="table">
<thead>
<tr>
<th>One</th>
<th>Two</th>
<th>Three</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data</td>
<td>Data</td>
<td>Data</td>
</tr>
</tbody>
</table>
</div>
以及调整大小的代码(归功于 SO 上的 user686605):
$(function() {
var pressed = false;
var start = undefined;
var startX, startWidth;
$("#grid").on('mousedown', 'th', function(e) {
start = $(this);
pressed = true;
startX = e.pageX;
startWidth = $(start).width();
$(start).addClass("resizing");
});
$(document).mousemove(function(e) {
if ( pressed ) {
$(start).width(startWidth+(e.pageX-startX));
}
});
$(document).mouseup(function(e) {
if ( pressed ) {
pressed = false;
}
});
});
这个小提琴中的演示:https://jsfiddle.net/xc0v6gkk/1/
在调整大小时,您可以看到未调整大小的表格标题变小以适应调整后列的不断增加的宽度。有没有一种方法可以强制这些列保持相同的宽度,并强制表格比其父级更宽,从而在此过程中显示一个水平滚动条?
当您添加足够多的列时,表格将超出其父级的边界,但不再可能调整大小。
我尝试在调整大小时检查宽度并在表格达到一定宽度时增加 div,但是随着 div 的宽度增加,您仍然无法继续水平拖动列:
$(document).mousemove(function(e) {
if (pressed) {
$(start).width(startWidth + (e.pageX - startX));
var docWidth = $('.wrapper').width(),
gridWidth = $('#grid').width();
if (docWidth - gridWidth == 15) {
$('.wrapper').width(docWidth + 100);
}
}
});
编辑
我认为知道为什么当表格开始溢出时调整大小停止工作对我来说很重要。调整大小的过程有点挑剔,但它是可以调整的。我只是不明白为什么当表格溢出时调整大小停止工作。
【问题讨论】:
-
你在找这个吗? jsfiddle.net/xc0v6gkk/2
-
不要使用 boostrap 表,而是使用一个可以放置 css 的类,例如:overflow-x : scroll
-
@Full.C 这绝对是我考虑过的事情。但是,该应用程序有各种模块,它们都使用 Bootstrap 表。我必须将非引导表的样式设置为看起来相似,而我的 css 技能对于这样的事情还不够好。这就是为什么我要寻找一种首先使用 Bootstrap 表的解决方案。
-
@IsmailFarooq 感谢您的评论。您能否提交一个答案来解释为什么会这样?我看到您为所有 th 和 tds 分配了固定宽度?
标签: javascript jquery html css twitter-bootstrap