如果td有任何文本,则附加逗号(,)加上html,否则只附加html

时间:2014-11-24 19:42:50

标签: javascript jquery html

我正在使用一些jQuery代码,我有些疑惑。这就是我现在所说的:

var html = '';
data.entities.forEach(function (value, index, array) {
    html += index !== data.entities.length-1 ? value.pais + ', ' : value.pais;
});

var rowUpdate = $('#distribuidorBody').find('#td-' + data.idToUpdate);
rowUpdate.text() !== "" ? html += ', ' + html : html;
rowUpdate.append(html);

最重要的想法:我可以多次执行相同的代码,因此第一次rowUpdate没有任何值,因此text()为空,我会在HTML中得到一些输出,例如: Country1, Country2, Country3依此类推,然后rowUpdate.text()应为Country1, Country2, Country3。因此,如果我第二次运行相同的代码并添加Country4, Country5,则rowUpdate.text()应为Country1, Country2, Country3, Country4, Country5。我的代码是对的吗?如果没有任何帮助?我没有收到错误,但我需要了解我所做的事情是对还是错。我也想知道这段代码的作用:

rowUpdate.text() !== "" ?: html += ', ' + html;

这不是我的,我看到它周围,但不知道它做了什么。

2 个答案:

答案 0 :(得分:1)

forEach的替代方案可以是map

var text = data.entities.map(function(v){ return v.pais }).join(', ');

reduce

var text = data.entities.reduce(function(a, b){ return {pais: a.pais +', '+ b.pais}}).pais;

对于三元运算符,您需要两个表达式:condition ? expr1 : expr2 MDN

var rowUpdate = $('#distribuidorBody').find('#td-' + data.idToUpdate);
text = (rowUpdate.text() !== "") ? ', ' + text : text;
// alternative with if
// if(rowUpdate.text() !== "") text = ', ' + text ;
rowUpdate.append(text);

更新:在每个值上添加span

var text = data.entities.map(function(v){ return '<span class="countryToDelete">' + v.pais + '</span>'  }).join(', ');

答案 1 :(得分:0)

可能更好的解决方案是构建要显示的项目数组,然后使用.join(', ')创建文本:

var items = [];
data.entities.forEach(function (value, index, array) {
    items.push(value.pais);
});
var displayText = items.join(', ');
$('#distribuidorBody').find('#td-' + data.idToUpdate).html(displayText);

现在,最后一行,因为'#td-' + data.idToUpdate是一个ID,它应该对页面是唯一的(如果没有,你应该这样做)。如果或者一旦确实如此,您可以将其缩短为

$('#td-' + data.idToUpdate).html(displayText);