javascript - 循环并显示对象内的内容
问题描述
我正在尝试遍历对象并将它们全部显示在 3 列布局中。
我看到的第一个问题是我正在覆盖前 2 个对象并且只显示最后一个对象。我认为这是因为没有创建新元素。
关于我需要做什么来显示所有 3 个对象的任何想法?
$(function() {
const CourseData = {
"1": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 1",
price: "14.95"
},
"2": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 2",
price: "19.95"
},
"3": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 3",
price: "4.95"
}
};
for (let courses in CourseData) {
document.getElementById("image").setAttribute("src", CourseData[courses].thumbnail);
document.getElementById("title").innerHTML = CourseData[courses].title;
document.getElementById("price").innerHTML = CourseData[courses].price;
}
});
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<div id="dynamic"></div>
<div class="container">
<div class="card col-sm-12 col-md-6 col-lg-3">
<div class="hover">
<a class="figure" href="register/index.php?course=101">
<img id="image" class="img-fluid card-img-top" alt="hazing prevention thumbnail">
</a>
</div>
<div class="card-body">
<a id="title" href="register/index.php?course=101" class="course-link">Course Title</a>
</div>
<div class="card-footer">
<p id="price" class="price mb-0">Course Price</p>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="course-data.js"></script>
</body>
</html>
解决方案
由于您已经加载了 jQuery,您可以使用$.append
简单的模板文字将所需的 HTML 添加到容器中。
$(function() {
const CourseData = {
"1": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 1",
price: "14.95"
},
"2": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 2",
price: "19.95"
},
"3": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 3",
price: "4.95"
}
};
const container = $("#cards-container");
for (let courses in CourseData) {
const {
thumbnail,
title,
price
} = CourseData[courses];
const template = `<div class="card col-sm-12 col-md-6 col-lg-3">
<div class="hover">
<a class="figure" href="register/index.php?course=101">
<img src="${thumbnail}" class="img-fluid card-img-top" alt="hazing prevention thumbnail">
</a>
</div>
<div class="card-body">
<a href="register/index.php?course=101" class="course-link">${title}</a>
</div>
<div class="card-footer">
<p class="price mb-0">${price}</p>
</div>
</div>`;
container.append(template);
}
});
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<div id="dynamic"></div>
<div id="cards-container" class="container">
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="course-data.js"></script>
</body>
</html>
此外,如果您不想使用 jQuery,您可以将 HTML 字符串附加到 innerHTML。
$(function() {
const CourseData = {
"1": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 1",
price: "14.95"
},
"2": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 2",
price: "19.95"
},
"3": {
thumbnail: "https://images.unsplash.com/photo-1518791841217-8f162f1e1131?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&w=1000&q=80",
title: "Title 3",
price: "4.95"
}
};
const container = document.getElementById("cards-container");
for (let courses in CourseData) {
const {
thumbnail,
title,
price
} = CourseData[courses];
const template = `<div class="card col-sm-12 col-md-6 col-lg-3">
<div class="hover">
<a class="figure" href="register/index.php?course=101">
<img src="${thumbnail}" class="img-fluid card-img-top" alt="hazing prevention thumbnail">
</a>
</div>
<div class="card-body">
<a href="register/index.php?course=101" class="course-link">${title}</a>
</div>
<div class="card-footer">
<p class="price mb-0">${price}</p>
</div>
</div>`;
container.innerHTML += template;
}
});
<html>
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body>
<div id="dynamic"></div>
<div id="cards-container" class="container">
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="course-data.js"></script>
</body>
</html>
请注意,我已经删除了卡片的 DOM 元素上的 id,因为会有多个这样的元素,并且 id 的用途将丢失。
推荐阅读
- angular - 使用可管道操作符并仅订阅“内部”可观察对象
- java - 每次我请求作业启动器创建新作业时如何重新启动我的批处理作业
- java - 如何更改此采样率转换代码以使声音变慢?
- google-apps-script - 谷歌表格:如何在通过谷歌表单回复添加的行上复制公式
- python - 如何在 64 位窗口中安装 pymqi?
- docker-compose - Docker-Compose 多行键
- modelica - Dymola 模型未在输出中关闭辅助变量的情况下进行初始化
- python - Django Rest 框架请求验证
- javascript - 如何在组件之间传递 v-model 值
- julia - Julia 将 DateTime 添加到 Time 或设置组件