使用 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>
我有一个 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>