【问题标题】:How to parse json and display a different color in HTML table depending on value?如何根据值解析 json 并在 HTML 表中显示不同的颜色?
【发布时间】:2014-05-11 08:23:35
【问题描述】:

场景: 我从一个外部 json 文件中获取数据,对其进行解析,然后将其附加到一个使用 footable jquery 插件的 HTML 表中。

问题: 这是一个完全的菜鸟问题......但是有人知道(或可以提供一个例子)如何使用 javascript 来解析那个 json 文件......并且取决于名称/值对之一的值,在表格中以不同颜色显示该文本?目前,所有内容都以纯文本显示。

COPD_QUAL.MED_ASSESS 是我希望根据值以不同方式显示的对象。所以我需要类似......

如果 COPD_QUAL.MED_ASSESS == "轻度加重"......以绿色粗体显示

如果 COPD_QUAL.MED_ASSESS == "中度恶化"......以黄色粗体显示

如果 COPD_QUAL.MED_ASSESS == "严重恶化"......以红色粗体显示

以下是我目前将数据附加到表格中的方式。任何人都可以帮助合并 if / 条件来完成上述操作吗?我需要在我的 createPatientTable 函数中添加它吗?

if (window.location.hostname == 'localhost') {
    console.log('local');
  $.ajax({
      type : 'GET',
      url  : 'json/gtw_copd_mpage3.json',
  dataType : 'json',
   success : function(json) {

        createPatientTable(json);
            },
            error: function (xhr, ajaxOptions, thrownError) {
    alert(xhr.status);
    alert(thrownError);
  }
        });
}else{
    var getPatients = new XMLCclRequest();
    getPatients.onreadystatechange = function () {
        if (getPatients.readyState == 4 && getPatients.status == 200) {
            var json = $.parseJSON(getPatients.responseText);
            createPatientTable(json);
    };
}
};

});


function createPatientTable(json) {
$.each(json.LIST, function(i, COPD_QUAL) {
    $('.footable > tbody:last').append('<tr><td>' + COPD_QUAL.PATIENT + '</td><td>' + COPD_QUAL.FIN +'</td><td>' + COPD_QUAL.NURSE_UNIT + '</td><td>' + COPD_QUAL.ROOM + '</td><td>' + COPD_QUAL.BED +'</td><td>' + COPD_QUAL.ATTENDING_PHYS + '</td><td>' + COPD_QUAL.LENGTH_OF_STAY + '</td><td>' + COPD_QUAL.MED_ASSESS + '</td></tr>');
});
$('.footable').footable();
};

这是文件中的 json 数组之一:

{"COPD_QUAL":"15","LIST":[   {"PATIENT":"TEST, TRICKLE","FIN":"70100905","NURSE_UNIT":"TIC","ROOM":"C219","BED":"A","ATTENDING_PHYS":"LEVITEN , DANIEL L","LENGTH_OF_STAY":"161days 20:15:24","MED_ASSESS":"Mild exacerbation"}...

【问题讨论】:

  • 请更好地缩进你的代码,这样更容易阅读。

标签: javascript jquery html css json


【解决方案1】:

我的建议是这样的:

/* ... */
+ '</td><td>' + COPD_QUAL.LENGTH_OF_STAY + 
'</td><td class="assessment ' + getSeverity(COPD_QUAL.MED_ASSESS) + '">' + 
COPD_QUAL.MED_ASSESS + '</td></tr>')

getSeverity = (function() {
    var lookup = {
        "Mild exacerbation": "mild",
        "Moderate exacerbation": "moderate",
        "Severe exacerbation": "severe" // presumably you didn't mean two milds...
    };
    var defaultValue = "unknown"
    return function(assessment) {
        return lookup[assessment] || defaultValue;
    };
}());

和 CSS 之类的:

.assessment {font-weight: bold;}
.mild {color: green;}
.moderate {color: yellow;}
.severe {color: red;}

【讨论】:

  • 感谢大家的快速反馈!我现在试一试。再次感谢。
【解决方案2】:

你能不能只添加一个 if 条件来将一个类附加到适当的行:

var class = '';
if(COPD_QUAL.MED_ASSESS == "Mild exacerbation"){
    class = 'mild';
} else if (COPD_QUAL.MED_ASSESS == "Moderate exacerbation") {
    class = 'moderate';
} else if (COPD_QUAL.MED_ASSESS == "??? exacerbation") {
    class = 'severe';
}

然后将您的 tr 更改为:

"<tr class="' + class + '">...

并在 CSS 文件中设置 .mild、.moderate、.severe 的样式。

【讨论】:

  • +1 击败了我。尽管他们可能不希望在整行上都使用这种样式,因此应该将其添加到相应的单元格中(td 元素)。
  • 击败我,但这是客户端 Javascript AJAX 响应,而不是 PHP 响应。所以你的字符串连接代码是关闭的......
  • 您不需要改用这种语法&lt;tr class="' + class + '"&gt; 吗?我认为 PHP 语法在 JS 中不起作用:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2013-08-25
相关资源
最近更新 更多