javascript - Javascript 中的 HTML 表条件格式代码未按计划工作

标签 javascript jquery html-table

我正在尝试创建一组规则,这些规则在我的 table 中影响行样式的 td 元素值之间相互依赖。

First issue

我对表格行进行条件格式化,以在特定规则下设置不同背景颜色的样式。

预期结果:

  • 如果宽度 > 0 => 颜色为红色
  • 如果宽度 == 0 && 高度 > 0 => 颜色为蓝色
  • 如果宽度 > 0 && 高度 > 0 => 颜色为黄色
  • 如果宽度 == 0 && 高度 == 0 => 颜色为白色

现实结果

  • 宽度 > 0 => 红色✓ 有效
  • 宽度 == 0 && 高度 > 0 => 蓝色✓ 有效
  • 如果宽度 > 0 && 高度 > 0 => 颜色为黄色X 不起作用,颜色为蓝色。
  • 如果宽度 == 0 && 高度 == 0 => 颜色为白色✓ 有效
<小时/>

Second issue

当我按下选择“每页行数”或分页编号时,它会丢失任何条件样式吗?

如果您有更好的方法,请随时建议执行此操作的最佳实践。谢谢,这是我的代码:

HTML

    <table id="table1"
       data-toggle="table"
       data-url="data1.json"
       data-pagination="true"
       data-sort-order="desc">
    <thead>
    <tr>
        <th data-sortable="true" data-field="name" >Name</th>
        <th data-sortable="true" data-field="W">Width</th>
        <th data-sortable="true" data-field="H">Height</th>
        <th data-sortable="true" data-field="D">Depth</th>
    </tr>
    </thead>
</table>

Javascript

var Counter = null;
$('#table1').on('load-success.bs.table', function () {

        $('td:nth-child(2)').each(function() {
            var redValue = $(this).text();
            if (redValue > 0) {
                var oTableRow = $(this).parent();
                oTableRow.css('background-color', 'red');
                Counter = 1; //W>0
            }else if(redValue == 0){
                Counter = 2;
            }
        });
        $('td:nth-child(3)').each(function() {
            var blueValue = $(this).text();
            var oTableRow = $(this).parent();
            if ((Counter= 2) && (blueValue > 0)) {
                oTableRow.css('background-color', 'blue');
            }else if((Counter == 1)&&(blueValue > 0)){
                oTableRow.css('background-color', 'yellow');

            }
        });
    });

JSON 数据集

    [{
  "name": "First Value",
  "W": 0,
  "H": 0,
  "D": 100
},{
"name": "First Value",
"W": 1,
"H": 0,
"D": 100
},{
"name": "First Value",
"W": 0,
"H": 1,
"D": 100
},{
"name": "First Value",
"W": 1,
"H": 1,
"D": 100
}];

最佳答案

正如@charlietfl所说,您想要循环行,然后检查条件并按行设置颜色。然后,我没有使用嵌套的 if-else 来确定该行的颜色,而是定义了一个 2x2 表 colorMapping ,其中包含每个可能结果的颜色:

  • 第一行:高度 === 0
  • 第二行:高度 > 0
  • 第一列:宽度 === 0
  • 第二列:宽度 > 0

这应该可以完成工作:

$('#table1').on('load-success.bs.table', function(){
    //create a color-mapping
    var colorMapping = [
        'white', 'red',
        'blue',  'yellow'
    ];

    $('tr', this)   //get rows ...
        .has('td')  //... that contain td-nodes
        .each(function(){
            var $row = $(this);
            //get w for this row
            var w = +$row.find('td:eq(1)').text();
            //get h for this row
            var h = +$row.find('td:eq(2)').text();

            //check wich of the four colors to choose
            var color = colorMapping[ (h>0? 2: 0) + (w>0? 1: 0) ];

            //assign color to this row
            $row.css('background-color', color);
        });
});

关于javascript - Javascript 中的 HTML 表条件格式代码未按计划工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38818805/

相关文章:

javascript - localStorage什么时候被浏览器清理?

javascript - 左对齐两个不同的文本字段而不使用列

javascript - 根据所选数字添加文本输入

javascript - 使用 jQuery/javascript 进行 HTML 表格转换

javascript - 无法读取表行未定义的属性 'style'

javascript - 如何在传单js中获取缩放事件的经纬度

javascript - Jquery 在第一页加载时加载,但在 ajax div 中重新加载时不加载

javascript - 使用按钮和 jQuery 从左或右滑动 DIV

javascript - 在窗口调整大小时不要修改 body 任何元素的宽度或高度

javascript - 如何使用 JQuery 从表中选择非空的最后一个单元格的前一个兄弟