2017-03-15 31 views
2

試圖將我附加的div限制爲4,我發現了一個簡單的答案,但是當我在兩個不同的$.each()中使用它時,只有兩個$.each()中的一個獲得了限制。在jQuery中限制附加div

說我有 - 這將返回4個div,但如果我有兩個這些1將有4個div和其他將沒有項目追加。

var maxAppend = 0; 
$.each(data.drinks.Upsell, function (index, value) { 
    if (maxAppend >= 4) return; 
    maxAppend++; 
    $('#rcmd_snacks_list').append(
     '<div class="col-md-3 col-sm-6"> <div class="thumbnail">' + 
     '<div class="image">' + '<img src="./assets/imgs/' + value.image + '" alt="' + value.name + '" class="img-responsive"> </div>' + 
     '<div class="caption">' + 
     '<p class="item-name">' + value.name + '</p>' + 
     '<p class="price">£' + parseFloat(value.price).toFixed(2) + '</p>' + 
     '<div class="row"> <button data-key="' + value.name + '" class="btn btn-success btn-sm addToCart" onClick="openNutritionInfo()"> <i class="fa fa-info fa-1x"></i> Nutrition Info</button> </div>' + 
     '</div>' + 
     '</div> </div>' 
    ); 
}); 

同上 -

$.each(data.snacks.Upsell, function (index, value) { 
    if (maxAppend >= 4) return; 
    maxAppend++; 
    $('#rcmd_drinks_list').append(
     '<div class="col-md-3 col-sm-6"> <div class="thumbnail">' + 
     '<div class="image">' + '<img src="./assets/imgs/' + value.image + '" alt="' + value.name + '" class="img-responsive"> </div>' + 
     '<div class="caption">' + 
     '<p class="item-name">' + value.name + '</p>' + 
     '<p class="price">£' + parseFloat(value.price).toFixed(2) + '</p>' + 
     '<div class="row"> <button data-key="' + value.name + '" class="btn btn-success btn-sm addToCart" onClick="openNutritionInfo()"> <i class="fa fa-info fa-1x"></i> Nutrition Info</button> </div>' + 
     '</div>' + 
     '</div> </div>' 
    ); 
}); 

我預計他們將追加4個格不是(4和無)。

+0

看起來你的兩個div有相同的id'rcmd_drinks_list'。這就是爲什麼它不起作用。你能不能也粘貼你的html –

+0

他們共享相同的計數變量。 : -/ – Vic

+1

在執行第二個'$ .each()'之前,您是否將'maxAppend'重新初始化爲0? –

回答

0

正如我在評論中提到的,最好將maxAppend設置爲實際的最大值。這樣,就不需要重置或修改maxAppend值。

var maxAppend = 4; // or const 
$.each(data.drinks.Upsell, function (index, value) { 
    if (index >= maxAppend) return; // correction: NOT +1 
    $('#rcmd_drinks_list').append(
     '<div class="col-md-3 col-sm-6"> <div class="thumbnail">' + 
     '<div class="image">' + '<img src="./assets/imgs/' + value.image + '" alt="' + value.name + '" class="img-responsive"> </div>' + 
     '<div class="caption">' + 
     '<p class="item-name">' + value.name + '</p>' + 
     '<p class="price">£' + parseFloat(value.price).toFixed(2) + '</p>' + 
     '<div class="row"> <button data-key="' + value.name + '" class="btn btn-success btn-sm addToCart" onClick="openNutritionInfo()"> <i class="fa fa-info fa-1x"></i> Nutrition Info</button> </div>' + 
     '</div>' + 
     '</div> </div>' 
    ); 
}); 
+0

現在的div數量是3 – MrNew

+1

你必須從條件中刪除+1指令,然後你將得到你的4個項目 –

+0

@MrNew brain fart,my bad。參見編輯答案 – Brian

0

你可以簡單地使用由$.each回調方法提供的指標:

$.each(data.snacks.Upsell, function (index, value) { 
    if (index >= 4) return; 

    $('#rcmd_drinks_list').append(
     '<div class="col-md-3 col-sm-6"> .... </div>' 
    ); 
}); 

如果要追加在未來的其他元素,你最好與你的容器內已有的div同步計數器:

var childrenDivs= $('#rcmd_snacks_list > div'); // get direct children div 
var maxAppend = 4; 
var remainingSlots = maxAppend - childrenDivs.size(); 

$.each(data.snacks.Upsell, function (index, value) { 
    if (remainingSlots <= 0) return; 
    remainingSlots--; 
    $('#rcmd_drinks_list').append(
     '<div class="col-md-3 col-sm-6"> .... </div>' 
    ); 
}); 
+0

感謝Pete和Brian已經提到在他們的評論中,我沒有想到過的索引 – MrNew

+0

我剛剛發現它比我慢,我會保留答案,因爲我t更完整。 –