我有一个名为groups的数组。该数组由name和regid组成。我想显示name的键作为表的列标题。为此,我使用了以下代码:
var Name=v.name;
var regId=v.regid;
var rowStr = '<th data-id="'+regId+'" width="10%">'+Name+'</th>'
$("#table tr:eq(0)").append(rowStr);
我除外:将名称显示为列标题,但具有相同注册名称的名称必须仅显示一次。 所以我用:
for(var i=0; i<=regId; i++)
{
$("#table th").each(function()
{
if($(this).data('id')== i)
{
var len=$(this).length;
if(len>0)
{
$(this).remove();
}
}
});
} for(var i=0; i<=regId; i++)
{
$("#table th").each(function()
{
if($(this).data('id')== i)
{
var len=$(this).length;
if(len>0)
{
$(this).remove();
}
}
});
}
但上面的代码删除了所有标题。怎么办? 希望你能帮助我解决这个问题。
JSFIDDLE:http://jsfiddle.net/jm3kr12w/8/
答案 0 :(得分:1)
使用以下for循环而不是你的循环。
for (var i = 0; i <= regId; i++) {
if ($("#table th[data-id=" + i + "]").length > 1) {
$("#table th[data-id=" + i + "]:gt(0)").remove();
}
}
在您的代码中$(this).remove()
将删除当前标头,并循环浏览每个标头。
答案 1 :(得分:1)
如果我理解正确,您正在寻求附加th
,然后决定是否适合这样做,如果没有,则将其删除(以及可能累积的任何其他重复项)。
如果我更正,那么做出决定会更有效,只有在适用的情况下附加th
。
再加上一些进一步的合理化,我最终得到了这个:
$.each(result, function(i, obj) {
$.each(obj.data, function(j, obj2) {
var id = obj2.id;
if(!groups[id]) {
groups[id] = { 'id': id, 'name': [], 'regid': [] };
}
groups[id].name.push(obj2.name);
groups[id].regid.push(obj2.regid);
var $existing = $("#table th").filter(function() {
return $(this).data('id') == obj2.regid;
});
if ($existing.length == 0) {
$('<th width="10%" />').data('id', obj2.regid).text(obj2.name).appendTo("#table tr:eq(0)");
}
});
});
<强> Updated fiddle 强>