layui渲染表格使得某个单元格背景颜色按照要求进行变色

  最近需要实现一个功能,根据返回的值的情况,使得layui某个单元格显示特定的颜色。下面我将解决思路和碰到的坑给大家讲一下

html前端页面是这个样子的

在前面的html页面里面的写法是这个样子的

   现在就是假设需要实现这样的功能,在表的姓名列,如果返回某个特定的名字,就设置这个单元格背景为红色,不是设置这一整行为红色!

  起初我的想法就是使用$("#trainList")的方法选中这个table,然后遍历这个表的行和列,然后再设置样色样式,然而选中的情况是只有一行。

  原因可能是layui只渲染了这个标题行,并不是在这里渲染的数据列,这是我碰到的第一个坑

 接下来,第二个坑,如果是的表格的标题栏有fixed属性,那么恭喜你,你会跟我一样碰到第二个坑,就是发现需要渲染的单元格怎么都变不了颜色,或者明明想让某一行都变色,结果就是有几个单元格变不了颜色,原因是layui渲染表格时,会让fixed属性的列单独渲染,导致你选不到,造成添加颜色样式失败

解决办法是属性列中去掉fixed属性

明白以上坑后,下面再解决如何渲染指定单元格的方法

//执行渲染
table.render({
    elem: '#trainList' //指定原始表格元素选择器(推荐id选择器)
    ,id:"trainList"
    ,height: 'full-100' //容器高度
    ,page:false
    ,title: '培训记录表'
    ,limit: 1000
    //,skin: 'row'//这一行和下一行用来使数据隔行显示
    //,even: true
    ,cols: [[
        {
         field: 'realname', title: '姓名', width: '5%', unresize: true, edit: false, sort: false
        },
        { field: 'cardDate', title: '打卡时间', width: '10%',  unresize: true, edit: false, sort: false },
        { field: 'record', title: '当天记录', width: '85%', sort: false }
        //{ field: 'totalHour', title: '累计小时数', width: '10%', sort: false }
        ]] //设置表头
    ,
    done: function (res,curr,count)
    {
       // console.log(res);
        //得到当前页码
        console.log(curr);
        //得到数据总量
        console.log(count);
        Layui_SetDataTableRowColor2();
    }
});

首先在表格处添加done方法,具体用法详见layui官网数据表格页,然后也就是最关键的,怎么获取到这个表格的数据

做法是,在网页端的html部分,在这个表格的定义处的上一级div添加一个id字段,方便等会jquery找到它

如下图

 

然后就是不断的进行js读取结点的操作,接下来的你的网页结构可能与我不同,但是原理差不多,主要就是用到.children(),取下面的第几个结点,getElementsByClassName这几个js方法反复使用,一直获取到<table>的html段,如下图

let div=$("#divId");
console.log('div',div);
let nodeDivList=div.children();
console.log("nodeDivList",nodeDivList);
let nodeDiv2=nodeDivList[2];
console.log("nodeDiv2",nodeDiv2);
let table1=nodeDiv2.getElementsByClassName('layui-table-box');
console.log("table123",table1);
//let nodeDivList2=table1.children();
console.log("table2",table1[0]);
let t1=table1[0].getElementsByClassName('layui-table-body layui-table-main');
//t1就是获取到的最终数据表格,包括数据的真表格
if (t1 != null && t1.length > 0) {
    //查询t1的所有tr标签
    let trs = t1[0].querySelectorAll("tr");
    //遍历所有行和所有单元格,找到姓名是XX的,然后设置背景颜色为红色
    for(let i=0;i<trs.length;i++){
        let tds=trs[i].querySelectorAll("td");
        for(let j=0;j<tds.length;j++){
            if(tds[j].innerText==="XXX"){
                //以下具体逻辑可根据实际业务需求修改
                console.log("找到XXX的值了........");
                console.log("tds["+j+"]",tds[j]);
                tds[j].style.backgroundColor= '#FF0000';//背景颜色
                //  tds[j].bgColor= '#FF0000';//背景颜色
                //trs[i].style.backgroundColor= '#FF0000';//背景颜色
                console.log('trs['+i+']',trs[i]);
            }
        }
    }
}
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您可以使用 layui表格渲染功能,通过设置单元格的样式来实现表格某一行的背景颜色。具体实现方式如下: 1. 在表格渲染之前,定义一个回调函数,用于设置单元格的样式。 ```javascript var table = layui.table; table.render({ elem: '#demo', cols: [[ //表头 {field: 'id', title: 'ID', width:80}, {field: 'username', title: '用户名', width:120}, {field: 'sex', title: '性别', width:80, sort: true}, {field: 'city', title: '城市', width:100}, {field: 'sign', title: '签名', width: 200}, {field: 'experience', title: '积分', width: 80, sort: true}, {field: 'score', title: '评分', width: 80, sort: true}, {field: 'classify', title: '职业', width: 100}, {field: 'wealth', title: '财富', width: 135, sort: true}, {fixed: 'right', title:'操作', toolbar: '#barDemo', width:150} ]], data: tableData, done: function(res, curr, count) { // 设置第二行的背景颜色为 #F2F2F2 var trElem = $('.layui-table tbody tr:nth-child(2)'); trElem.css('background-color', '#F2F2F2'); } }); ``` 在上述代码中,通过 done 回调函数来实现对表格单元格样式进行设置。 2. 在回调函数中通过 jQuery 选择器选中表格中的某一行,并设置该行单元格背景颜色。 ```javascript var trElem = $('.layui-table tbody tr:nth-child(2)'); trElem.css('background-color', '#F2F2F2'); ``` 在上述代码中,通过 jQuery 选择器选中表格中的第二行,并设置该行单元格背景颜色为 #F2F2F2。 通过以上实现方式,您就可以在 layui表格中设置某一行的背景颜色了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值