datatable踩坑

在用tab bar切换的页面里放入了两个Datatable踩的坑

问题描述

页面形态大致如此,在初始加载时,显示tab1的datatable,此时表头能够正常显示,但是切换到tab2时,表头被压缩在了一起。

原因分析

这是因为datatable的渲染依赖于父容器,由于tab的写法,导致了页面刚加载的时候不渲染tab2页面,所以tab2页面的datatable在加载时使用了自身默认值100px

解决办法

方法1

百度提供的方法

// 上方是bootstrap的选择器,具体根据实际情况来定
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
    $.fn.dataTable
        .tables( { visible: true, api: true } )
        .columns.adjust();
})

但是这种方法对我的页面并不起作用,并且总是提示cannot find property 'adjust'
在控制台里调试发现是table()函数下就没有columns属性了

方法2

在构造的时候保留datatable的jq对象

tableList = #("#demoTable").DataTable({
  // properties
})

#("$tab").click(function(e) {
  tableList.columns.adjust();
  // OR
  #("demoTable").DataTable().columns.adjust();
})

这样就可以强制让列重新适应页面宽度,表格就能够正常显示了

至于为什么第一种方式不行,我也没想明白,不知道为什么第一种方式没法获取到columns。。。

posted @ 2023-04-12 10:44  zhiless  阅读(33)  评论(0编辑  收藏  举报