使用 JQuery 将 JSON 数组放入 HTML 列表

Using JQuery to put a JSON array into a HTML list

我有一个 JSON 文件,它将一些数据存储为对象数组:

{
  "projects": [
    {
        "title": "title0",
      "content": "content0"
    },
    {
      "title": "title1",
      "content": "content1"
    },
    {
      "title": "title2",
      "content": "content2"
    }
  ]
}

我正在使用 JQuery 尝试将它们一个接一个地放入列表中:

$.getJSON("projects.json", function( data ) {
    console.log(typeof jsondataect);
    var features = document.getElementById('featuredProjects');
    var ul = document.createElement('ul');
    for (var i = 0; i < data.length; ++i) {
      var li = document.createElement('li');
    $('li').html(data[i].content);
      ul.appendChild(li);                                 
    }
    features.appendChild(ul);  
});

但这会在我的文档中生成一个空的 HTML 列表。 我希望 HTML 像这样列出 JSON 数组的元素:

<div>
    <ul>
        <li>title0</li>
        <li>content0</li>
        <li>title1</li>
        <li>content1</li>
        <li>title2</li>
        <li>content2</li>
    </ul>
</div>

我做错了什么?

您的主要问题是您试图遍历 data,这只是一回事 - 一个名为 projects 的 object。您需要遍历 data.projects,包括在 for() 中使用 data.projects.length。此外,除了一行 $('li')... 即 jQuery,你已经在常规 javascript 中完成了大部分工作,所以我将其更改为常规 JS。但是自从行

以来它无论如何都行不通
$('li').html(data[i].content);

是说“找到页面上的每个 <li> 元素并将其内部文本更改为 data[i].content。我将其更改为仅使用您之前制作的行的 li 引用,并使用 innerHTML 而不是 $(id).html()

最后,我终于在你的标题中看到,你想在 jQuery 中执行此操作。所以我添加了第二个循环来展示如何做到这一点。

window.onload = () => {
  var data = {
    "projects": [{
        "title": "title0",
        "content": "content0"
      },
      {
        "title": "title1",
        "content": "content1"
      },
      {
        "title": "title2",
        "content": "content2"
      }
    ]
  }



  var features = document.getElementById('featuredProjects');
  var ul = document.createElement('ul');
  for (var i = 0; i < data.projects.length; ++i) {
    var li = document.createElement('li');
    ul.appendChild(li);
    li.innerHTML = data.projects[i].title;

    li = document.createElement('li');
    ul.appendChild(li);
    li.innerHTML = data.projects[i].content;


  }
  features.appendChild(ul);
  
  
  // here's the jQuery way
  // Also showing a different way that you can loop through an array 
  let new_ul=[];
  data.projects.forEach( obj => {
   new_ul.push("<li>"+obj.title+"</li>");
   new_ul.push("<li>"+obj.content+"</li>")
  })
  // join all the li's 
   $('#featuredProjectsJQ').html("<ul>" + new_ul.join("") + "</ul>")
   

}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>

<body><h3>Regular JS</h3>
  <div id='featuredProjects'></div>
  
  <h3>jQuery JS</h3>
  <div id='featuredProjectsJQ'></div>
</body>

</html>