Цикл for .. of проблема

171
10 октября 2018, 15:20

У нас есть массив объектов newData(длина массива 9 ел.).Прохожу по нему циклом for...0f,на каждой итерации должна создаваться разметка html и вставляться в сам html.В итоге я получаю только 1 вставку этой разметки , то есть итерацию мы делаем 9 раз , а replaceItemTemplate ( разметка html ) создается только 1 раз!В чем проблема?

for(item of newData) { 
    var replaceItemTemplate = '<div class="col-sm-3 col-xs-6">\ 
      <img src="$url" alt="$name" class="img-thumbnail">\ 
      <div class="info-wrapper">\ 
      <div class="text-muted">$name</div>\ 
      <div class="text-muted top-padding">$description</div>\ 
      <div class="text-muted">$date</div>\ 
      </div>\ 
    </div>'; 
     
    let resultHTML = replaceItemTemplate 
     .replace(/\$name/gi, item.name) 
     .replace("$url", item.url) 
     .replace("$description", item.description) 
     .replace("$date", item.date); 
 
    firstBlock.innerHTML = resultHTML; 
}

Answer 1

вместо

firstBlock.innerHTML = resultHTML;

используй

firstBlock.insertAdjacentHTML('beforeend', resultHTML);
for(item of newData) {
    var replaceItemTemplate = '<div class="col-sm-3 col-xs-6">\
      <img src="$url" alt="$name" class="img-thumbnail">\
      <div class="info-wrapper">\
      <div class="text-muted">$name</div>\
      <div class="text-muted top-padding">$description</div>\
      <div class="text-muted">$date</div>\
      </div>\
    </div>';
    let resultHTML = replaceItemTemplate
     .replace(/\$name/gi, item.name)
     .replace("$url", item.url)
     .replace("$description", item.description)
     .replace("$date", item.date);
    firstBlock.insertAdjacentHTML('beforeend', resultHTML);
}

и вообще

let resultHTML = `
<div class="col-sm-3 col-xs-6">
          <img src="${item.url}" alt="${item.name}" class="img-thumbnail">
          <div class="info-wrapper">
          <div class="text-muted">${item.name}</div>
          <div class="text-muted top-padding">${item.description}</div>
          <div class="text-muted">${item.date}</div>
          </div>
</div>
`
Answer 2

innerHTML полностью переписывает содержимое, то есть вы каждый раз переписываете содержимое, в итоге после цикла у вас останется только последний вариант

let resultHTML = ''
for(item of newData) {
    var replaceItemTemplate = '<div class="col-sm-3 col-xs-6">\
      <img src="$url" alt="$name" class="img-thumbnail">\
      <div class="info-wrapper">\
      <div class="text-muted">$name</div>\
      <div class="text-muted top-padding">$description</div>\
      <div class="text-muted">$date</div>\
      </div>\
    </div>';

    // добавляем к результату на каждой иттерации
    htmlResult += replaceItemTemplate
     .replace(/\$name/gi, item.name)
     .replace("$url", item.url)
     .replace("$description", item.description)
     .replace("$date", item.date);
}
firstBlock.innerHTML = resultHTML;
READ ALSO
Не обновляется сайт на Android Chrome

Не обновляется сайт на Android Chrome

Написал простенький сайт: (indexphp)

188
Не появляется фон rgba

Не появляется фон rgba

никак не могу понять что не такКогда я пробую использовать свойство rgba() для main-text___form, ничего нет (делаю по видео) делала как там одной строчкой...

188
Закрывающий xml-тег в тексте textarea

Закрывающий xml-тег в тексте textarea

Нужно в textarea поместить xml-code

177