2015-06-16 17 views
1

我有一個名爲組的數組。該數組由名稱和regid組成。我想顯示名稱的關鍵字作爲表格的列標題。爲此,我使用代碼如下:避免相同的表頭多次,當它給動態使用jQuery

var Name=v.name; 
    var regId=v.regid; 
    var rowStr = '<th data-id="'+regId+'" width="10%">'+Name+'</th>' 
    $("#table tr:eq(0)").append(rowStr); 

我除外:顯示名稱作爲列標題,但其具有相同的REGID名必須只示出了一個時間。 於是我就用:

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/

回答

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()將刪除當前標題,並且循環顯示每個標題。

+0

它運作良好。謝謝。@ Priyank – Rose

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