我有一个Javascript函数,我想检查多个if语句返回
如果值存在或者不为空,那么它应该返回一行信息,
我不知道该怎么做,我在想这样的事情,例如:
function format(d){
return '<table cellpadding="5" cellspacing="0" border="0">' +
if (name) {
'<tr>' +
'<td>Name:</td>' +
'<td>' + d.name + '</td>' +
'</tr>' } +
if (place)
'<tr>' +
'<td>Place:</td>' +
'<td>' + d.place + '</td>' +
'</tr>' } +
if (date) {
'<tr>' +
'<td>Date:</td>' +
'<td>' + d.date + '</td>' +
'</tr>' } +
'</table>';
}
就像Daniel指出的,你可以像这样构建字符串:
function myFormat(d) {
let result = '<table cellpadding="5" cellspacing="0" border="0">';
if (name){
result += '<tr>' + '<td>Name:</td>' + '<td>' + d.name + '</td>' + '</tr>';
}
if (place){
result += '<tr>' + '<td>Place:</td>' + '<td>' + d.place + '</td>' + '</tr>';
}
if (date){
result += '<tr>' + '<td>Date:</td>' + '<td>' + d.date + '</td>' + '</tr>';
}
result += '</table>';
return result;
}
Html元素也可以组合在一起,这样更简单:
'<tr><td>Place:</td><td>' + d.name + '</td></tr>'
我看到您可以为row创建一个模板。为什么不使用一个单独的函数:
formatRow(value, label)
'formatRow'函数可以使用if语句检查value是否为空,并决定返回一行或空字符串进行连接。
function formatRow(value, label){
if(value) {
return '<tr>' +
'<td>' + label + '</td>' +
'<td>' + value + '</td>' +
'</tr>';
}
return '';
}
然后在format()函数中为每个想要使用的属性运行它。
function createCell(text){
const td = document.createElement('td');
td.textContent=text;
return td
}
function createRow(data, key){
row = document.createElement('tr');
row.appendChild(createCell(key[0].toUpperCase() + key.substring(1) + ':' ))
row.appendChild(createCell(data[key]))
return row;
}
function format(d){
table = document.createElement('table');
table.setAttribute("cellpadding", "5");
table.setAttribute("border", "0");
table.setAttribute("cellspacing", "0");
Object.keys(d).forEach(key => table.appendChild(createRow(d, key)))
return table
}
document.body.appendChild(format({data: '5 feb 2021', name: 'John', place: 'New York' }))
document.write('<hr>')
document.body.appendChild(format({data: '5 feb 2021', name: 'John' }))
document.write('<hr>')
document.body.appendChild(format({data: '5 feb 2021' }))