Ваш код зациклен правильно. Проблема в том, что вы используете html()
, который полностью перезаписывает весь существующий контент в элементе. Поэтому при каждой последующей итерации вы удаляете ранее добавленный контент. Чтобы это исправить, измените html()
на append()
:
let data = {
results: [{
value_inc_vat: 'value_inc_vat1',
valid_from: 'valid_from1'
},{
value_inc_vat: 'value_inc_vat2',
valid_from: 'valid_from2'
}]
}
var i;
for (i = 0; i < 2; i++) {
$('#display').append('<p> Price: ' + data.results[i].value_inc_vat + '</p>');
$('#display').append('<p> Time : ' + data.results[i].valid_from + '</p>');
$('#display').append([i]);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="display"></div>
Стоит также отметить, что вы можете использовать map()
для построения массива строк, который затем вы можете append()
только один раз для повышения производительности. Попробуйте это:
let data = {
results: [{
value_inc_vat: 'value_inc_vat1',
valid_from: 'valid_from1'
},{
value_inc_vat: 'value_inc_vat2',
valid_from: 'valid_from2'
}]
}
var html = data.results.map(function(result) {
return '<p>Price: ' + result.value_inc_vat + '</p><p>Time : ' + result.valid_from + '</p>';
// interpolated string version, note this won't work in IE:
//return `<p>Price: ${result.value_inc_vat}</p><p>Time : ${result.valid_from}</p>`;
});
$('#display').append(html);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="display"></div>