当它使用jQuery

时间:2015-06-16 05:42:02

标签: javascript jquery html arrays json

我有一个名为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/

2 个答案:

答案 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