2017-02-09 17 views
0

我想檢查任何ID發送與Ajax和響應JSON從JSON獲取ID然後檢查是否有一個ID到跨度,然後添加它,但不是工作總是添加和添加越來越多的對於每個跨度數據獲取ID和檢查ID從JSON響應

jQuery的

e.results.forEach(function(e) { 
    var name = e.name; 
    var id = e.id; 
    if ($(".visitors span").length) { 
     $('.visitors span').each(function() { 
      var data_id = $(this).attr('data-id'); 
      if (data_id != id) { 
       $(".visitors").append("<span data-id='" + id + "'>" + name + "</span>"); 
      } 
     }); 
    } else { 
     $(".visitors").append("<span data-id='" + id + "'>" + name + "</span>"); 
    } 
}); 
+0

您正在附加data-id = id,與您已有的id相同,因此.each也會包含該id,並且您將擁有該id的無限量span。 –

+0

我沒有得到它...... –

+0

您正在迭代「$('。visitors span')」,但您將添加一個新的跨度到帶有您剛剛從結果中收到的ID的.visitors中,因此您將再次迭代它,並一次又一次... –

回答

1

雖然我覺得你的代碼是正確的,但一個建議:不要通過你要追加跨度循環的,只是檢查是否有跨度一個data-id存在(使用CSS Attribute-Equal Selector),如果不添加像這樣的新跨度:

e.results.forEach(function(e) { 
    var name = e.name; 
    var id = e.id; 

    var $span = $(".visitors span[data-id = '" + id + "']"); // select all the spans that have the data-id equal to id 
    if (!$span.length) { // if there is none 
     $(".visitors").append("<span data-id='" + id + "'>" + name + "</span>"); // then add a new one 
    } 
}); 
+0

我不夠聰明...謝謝你! –

+0

是的工作好..而且快得多 –

+0

不客氣! –