将数据从JSON插入到html元素

时间:2017-09-15 23:40:04

标签: javascript html arrays json loops

我有3个对象的JSON文件:

[
  {
    "image": "assets/image.jpg",
    "title": "Text",
    "text": "Some text",
    "date": "23/11/2013"
  },
 ... 
]

3个HTML元素:

<div class="blog-post">
  <img src="" class="blog-image"/>
  <h2 class="blog-title"></h2>
  <p class="blog-text"></p>
  <div class="blog-date"></div>
</div>

我知道如何从1个对象获取数据到1个html元素:

((() => {
  const getJSON = (url, callback) => {
    const xhr = new XMLHttpRequest();
    xhr.open('get', url, true);
    xhr.responseType = 'json';
    xhr.onload = () => {
      const status = xhr.status;
      if (status === 200) {
        callback(null, xhr.response);
      } else {
        callback(status);
      }
    };
    xhr.send();
  };

  const blogTitle = document.querySelector('.blog-title');
  const blogText = document.querySelector('.blog-text');
  const blogDate = document.querySelector('.blog-date');
  const blogImage = document.querySelector('.blog-image');

  getJSON('/test-data.json', (err, data) => {
    if (err != null) {
      return false;
    } else {
      blogImage.src = data.image;
      blogTitle.innerText = data.title;
      blogText.innerText = data.text;
      blogDate.innerText = data.date;
    }
  });
}))();

但是如何围绕json文件中的所有对象循环并将数据插入到html元素?

1 个答案:

答案 0 :(得分:2)

因此,您的JSON文件将返回一个数组,我们可以像这样遍历数组:

getJSON('./test-data.json', (err, data) => {
  if (err != null) {
    return false;
  } else {
    data.forEach(obj => {
      createElements(obj);
    });
  }
});

createElements是我写的一个函数:

function createElements(obj) {
  const mainDiv = document.createElement('div');
  mainDiv.classList.add('blog-post');
  const img = document.createElement('img');
  img.classList.add('blog-image');
  img.src = obj['image'];
  const title = document.createElement('h2');
  title.classList.add('blog-title');
  title.innerHTML = obj['title'];
  const text = document.createElement('p');
  text.classList.add('blog-text');
  text.innerHTML = obj['text'];
  const date = document.createElement('div');
  date.classList.add('blog-date');
  date.innerHTML = obj['date'];
  mainDiv.appendChild(img);
  mainDiv.appendChild(title);
  mainDiv.appendChild(text);
  mainDiv.appendChild(date);
  document.querySelector('body').appendChild(mainDiv);
}

非常详细,但是这将为您的JSON数组中的每个对象添加一个新帖子,并使用正确的类。您可以更改createElements函数的最后一行,将其附加到与正文不同的元素。