近期项目使用的jQuery+JSP,前端组件使用了layui。涉及到了排序、合计、多级表头等问题。

layui表格有三种渲染方式,此文使用的是方法渲染。以下功能均是基于方法渲染。

一、排序

为某列排序,在table渲染时,首先要开启排序,然后添加initSort参数,并添加要排序的字段名:

<table id="layTable" lay-filter="layTable"></table>
table.render({
   elem: '#layTable',
   data: tableData,
   sort:true,  // 开启排序
   initSort: {
     field: 'value',// 要排序的字段
     type: 'desc' //排序方式  asc: 升序、desc: 降序、null: 默认排序
   }
 });

二、合计

显示合计行。首先要开启合计功能,在table渲染时添加totalRow:true。然后在要显示合计两字的列添加totalRowText:"合计",最后在需要合计的列添加totalRow: true,这样就开启了合计功能。totalRow属性会自动计算所在列的和。

合计完成后我们会发现每个合计的数字后面都有00,例如16.00。如果不需要我们可以通过done函数来去掉结尾的0。

 //渲染表格
 table.render({
   elem: '#layTable',
   data: tableData,
   totalRow:true, // 开启合计功能
   cols: [tableColumns],
   done:function(res, curr, count){// 去掉合计行小数点
     var divArr = $(".layui-table-total div.layui-table-cell");
     $.each(divArr,function (index,item) {
       var _div = $(item);
       var content = _div.html();
       content = content.replace(".00","");
       _div.html(content);
     });
   }
 });

三、表头字数太多换行

首先给需要换行的列添加width属性。然后添加以下CSS样式:

 .layui-table-cell {
    padding:0 4px;
    height:auto;
    overflow:visible;
    text-overflow:inherit;
    white-space:normal;
    word-break: break-all;
    text-align: center;
 }

效果:

四、多级表头

只有一级表头的情况下,所有列均在同一个数组。多级表头有多个数组。每个数组代表一级。再通过rowspan/colspan区分,例如:

五、关闭分页,显示所有数据

有时我们并不需要分页功能,而需要显示出所有数据。使用limit属性

 table.render({
   elem: '#layTable',
   height: 'auto',
   data: tableData,
   page: false, // 关闭分页
   limit: Number.MAX_VALUE  // 显示所有数据       
 });

六、表头和表内容主体对不齐

在项目有时会出现这种情况,表头和内容主体对不齐,差的正是滚动条的距离。网上有人说需要改源码,然而我按网上说得改了并没有用。我是利用CSS隐藏了滚动条,解决了对不齐的问题。

修改前:

修改后:

 /*添加css*/
.layui-table-body{
   margin-right: -1.15%; /*最好使用百分比,能适应不同分辨率的屏幕*/
 }

 2023-09-21--------------------更新

注意:图中的`-1.15%`可修改为`6px`

滚动条隐藏后不影响页面跟随鼠标滚动。

-----------------------8.24更新----------------8.24更新----------------------------

上面的解决方法只适合在表格有滚动条的时候,没滚动条时则不需要此`css`,所以我们要判断下。

table.render({
  elem:'#layTable',
  done:function () {						
    var tableWidth = $(".layui-table-body").width()
    var tableContentWidth = $(".layui-table-body .layui-table").width()

    // 查看html结构可知,如果tableWidth > tableContentWidth,说明存在滚动条
    // 表头和内容错开的宽度正好是一个滚动条的宽度,将滚动条隐藏即可(将主体内容向右移动一个滚动条 
的宽度)
    if(tableWidth > tableContentWidth){
	  /*解决表头和内容错乱问题*/
	  $('.layui-table-body').css('margin-right','-1.15%')
	}
  }
})

七、给表格添加动态高度

我们知道同一固定高度在不同显示器下显示效果是不一样的,为了统一效果就需要动态的高度。

这个也是在done函数里完成。

 table.render({
   elem:'#layTable',
   // height:680,
   data:tableData,
   done:function () {
     // 请求成功后,动态赋值表格高度
     $(".layui-table-body").css({
       height: "calc(100vh - 185px)",
     });
   }
 })
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐