如何使用 jQuery UI 使 datatables.js 的列可调整大小

Posted

技术标签:

【中文标题】如何使用 jQuery UI 使 datatables.js 的列可调整大小【英文标题】:How to make columns of datatables.js resizable with jQuery UI 【发布时间】:2018-04-08 10:00:03 【问题描述】:

我找到了在 *** 中调整表格列大小的解决方案

jQuery UI Resize with table and colspans

我正在尝试将其应用于使用服务器端处理填充的数据表,但数据表不允许更改列宽。

我试过这个http://jsfiddle.net/BlackSRC/JvELx/2/

我有这个简单的数据表

<table id="datatable-1" class="table table-hover" style="width: 100%">
</table>

我的数据表初始化是:

$(table).DataTable(
	'lengthMenu': [[10, 25, 50, 100], [10, 25, 50, 100]],
	'ordering': false,
	'processing': true,
	'serverSide': true,
	'dom': 'Blfrtip',
	'ajax': 
		'url': 'ajax.php',
		'type': 'GET'
	,
	'columns':[
		'data': 'id', 'title': 'Id',
		'data': 'A', 'title': 'A',
		'data': 'B', 'title': 'C',
		'data': 'C', 'title': 'D',
		'data': 'D', 'title': 'E'
	]
);

有人知道如何使用 datatables.js 调整列的大小吗?

【问题讨论】:

向我们展示您到目前为止所做的尝试。 【参考方案1】:

尝试在您的数据表上将autoWidth 选项设置为false

$(table).DataTable(
    'lengthMenu': [[10, 25, 50, 100], [10, 25, 50, 100]],
    'ordering': false,
    'processing': true,
    'serverSide': true,
    'autoWidth': false,
    'dom': 'Blfrtip',
    'ajax': 
        'url': 'ajax.php',
        'type': 'GET'
    ,
    'columns':[
        'data': 'id', 'title': 'Id',
        'data': 'A', 'title': 'A',
        'data': 'B', 'title': 'C',
        'data': 'C', 'title': 'D',
        'data': 'D', 'title': 'E'
    ]
);

然后添加css

table 
    width: 100%;

【讨论】:

【参考方案2】:

我没有看到问题。你确实想先运行.DataTable(),然后运行.resizable()

示例:http://jsfiddle.net/Twisty/ah67jopf/3/

JavaScript

$(function() 
  $(".data").DataTable(
    'lengthMenu': [
      [10, 25, 50, 100],
      [10, 25, 50, 100]
    ],
    'ordering': false,
    'processing': true,
    'serverSide': true,
    'dom': 'Blfrtip',
    'ajax': 
      'url': 'ajax.php',
      'type': 'GET'
    ,
    'columns': [
      'data': 'id',
      'title': 'Id'
    , 
      'data': 'A',
      'title': 'A'
    , 
      'data': 'B',
      'title': 'C'
    , 
      'data': 'C',
      'title': 'D'
    , 
      'data': 'D',
      'title': 'E'
    ]
  );
  $('table th').resizable(
    handles: 'e',
    minWidth: 18,
    stop: function(e, ui) 
      $(this).width(ui.size.width);
    
  );
);

更新

在 Stop 回调中,您可以设置 th 元素的新大小。

希望对您有所帮助。

【讨论】:

这个例子工作得很好,就像我的代码,但我的不工作。我可以在检查器中看到宽度发生了变化,但在浏览器中没有显示调整大小。 @omixam 您在控制台中看到任何错误吗? &lt;head&gt; 中的库是如何加载的,顺序是什么? 控制台中的任何错误。我禁用了所有库,顺序如下:css:datatables 和 jquery-ui,对于 JS:jquery、jquery-ui 和 datatable。 我建议使用不同的顺序:Jquery UI CSS、Datatable CSS、jQuery、jQuery UI、DataTable。应该像你描述的那样工作。我假设您的意思是控制台中没有出现错误? 我使用了你建议我的顺序,但结果是一样的。控制台中没有错误。

以上是关于如何使用 jQuery UI 使 datatables.js 的列可调整大小的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 jQuery UI 插件使 html 文本框可拖动和调整大小?

如何使 jquery 移动加载器中 ui-loader 的宽度更宽?

如何使用 jQuery UI 使 datatables.js 的列可调整大小

如何使用 jquery ui 使拖动和克隆的元素再次可拖动?

如何使 jquery-ui-dialog 没有关闭按钮?

如何使 jQuery UI 自动完成,以便当用户开始输入其他内容时进入模态?