程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

Foreach在foreach中,同时附加到结果div

发布于2021-12-03 00:24     阅读(597)     评论(0)     点赞(4)     收藏(3)


我有 json 信息(如下所示)。我可以轻松打印教室名称和级别。但我不知道如何循环遍历学生以将其打印出来。我不确定如何在 foreach 循环中执行 foreach 循环。我的 HTML 不是一成不变的,如果需要,可以稍作更改。

<div id="results">
    <div class="classroom">
        <div class="cr-name">Name: maths class</div>
        <div class="cr-level">Level: 4</div>
        <div class="students">
            <div class="student">john 19</div>
            <div class="student">Mike 34</div>
            <div class="student">Billy 19</div>
        </div>
    </div><br>
    <div class="classroom">
        <div class="cr-name">Name: English class</div>
        <div class="cr-level">Level: 2</div>
        <div class="students">
            <div class="student">Sam 24</div>
            <div class="student">Timmy 32</div>
            <div class="student">John 19</div>
            <div class="student">Paul 54</div>
        </div>
    </div>
</div><br>

json 数据如下所示:

[
  {
    "classroom": "maths class",
    "students": [
      {
        "name": "john",
        "age": 20
      },
      {
        "name": "Mike",
        "age": 34
      },
      {
        "name": "Billy",
        "age": 19
      }
    ],
    "level": 4
  },
  {
    "classroom": "English class",
    "students": [
      {
        "name": "Sam",
        "age": 24
      },
      {
        "name": "Timmy",
        "age": 32
      },
      {
        "name": "John",
        "age": 19
      },
      {
        "name": "Paul",
        "age": 54
      }
    ],
    "level": 2
  }
]

我的 HTML:

<div id="results">
</div>

我的Javascript(其中数据是上面的json信息):

if(typeof data !== 'undefined' && data.length > 0) {
    data.forEach((myclass, idx) => {
        $("#results").append(`
        <div class="classroom">
            <div class="cr-name">Name: ${data.classroom}</div>
            <div class="cr-level">Level: ${data.level}</div>
        </div><br>
      `);
    });
}

解决方案


将学生数组和.map每个项目转换为 HTML 字符串,例如<div class="student">john 19</div>,然后将其连接在一起:

const data = [
  {
    "classroom": "maths class",
    "students": [
      {
        "name": "john",
        "age": 20
      },
      {
        "name": "Mike",
        "age": 34
      },
      {
        "name": "Billy",
        "age": 19
      }
    ],
    "level": 4
  },
  {
    "classroom": "English class",
    "students": [
      {
        "name": "Sam",
        "age": 24
      },
      {
        "name": "Timmy",
        "age": 32
      },
      {
        "name": "John",
        "age": 19
      },
      {
        "name": "Paul",
        "age": 54
      }
    ],
    "level": 2
  }
]

data.forEach(({ classroom, level, students }) => {
    $("#results").append(`
    <div class="classroom">
        <div class="cr-name">Name: ${classroom}</div>
        <div class="cr-level">Level: ${level}</div>
        <div class="students">
            ${
              students
                .map(({ name, age }) => `<div class="student">${name} ${age}</div>`)
                .join('')
            }
        </div>
    </div><br>
  `);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="results"></div>

那就是输入数据是否可信。如果它不可信,直接编写这样的 HTML 字符串可能会导致任意代码执行。如果这是您需要防止的事情,请确保先删除所有<>括号:

name.replace(/[<>]/g, '')
age.replace(/[<>]/g, '')



所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.qianduanheidong.com/blog/article/246447/616d321e1d9f50e3fc29/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

4 0
收藏该文
已收藏

评论内容:(最多支持255个字符)