javascript - 循环并显示对象内的内容

标签 javascript object

我正在尝试循环遍历对象并将它们全部显示在 3 列布局中。

我看到的第一个问题是我覆盖了前两个对象并只显示最后一个对象。我认为这是因为没有创建新元素。

关于我需要做什么才能显示所有 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 的用途将会丢失。

关于javascript - 循环并显示对象内的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57282255/

相关文章:

c# - C# 中类似 JavaScript 的匿名函数

javascript - 如何限制文本框仅使用 javascript 接受 10 个字母字符?

javascript - 在 JavaScript 中处理点/小向量的最有效方法是什么?

java - java - 如何测试对象引用在Java中使用了多少字节?

java - 如何从 XML 文件创建对象图?

c++ - 澄清列表和删除元素

Python:类方法返回名

javascript - 使用 Douglas Crockford 的函数继承在 Javascript 中调用基方法

javascript - iPhone Safari HTML 表单 'undefined' 不是对象

javascript - Jquery 中的可拖动项目