Javascript 为什么使用.map()尝试构建html表不起作用?

Javascript 为什么使用.map()尝试构建html表不起作用?,javascript,json,ecmascript-6,Javascript,Json,Ecmascript 6,我想通过将JSON传递到.map中生成一个表,然后将其作为子表附加到主表中。正如您将在下面看到的,当您运行代码时,它会将我的连接和作为字符串附加到表中。它不会创建实际的行和单元格。谢谢你能提供的帮助 var data = { 'results': [ { 'firstName': 'John', 'lastName': 'Doe', 'email': 'jdoe@mail.com' }, { 'firstName': '

我想通过将JSON传递到.map中生成一个表,然后将其作为子表附加到主表中。正如您将在下面看到的,当您运行代码时,它会将我的连接和作为字符串附加到表中。它不会创建实际的行和单元格。谢谢你能提供的帮助

var data = {
  'results': [
    {
      'firstName': 'John',
      'lastName': 'Doe',
      'email': 'jdoe@mail.com'
    },
    {
      'firstName': 'Luke',
      'lastName': 'Doe',
      'email': 'loe@mail.com'
    },
    {
      'firstName': 'Sarah',
      'lastName': 'Doe',
      'email': 'sdoe@mail.com'
    },
    {
      'firstName': 'July',
      'lastName': 'Doe',
      'email': 'julydoe@mail.com'
    },
    {
      'firstName': 'Jane',
      'lastName': 'Doe',
      'email': 'janedoe@mail.com'
    }    
  ]
}

var generateHtml = data.results.map(function(item) {
  return '<tr><td>' + item.firstName + '</td></tr>';
})

document.getElementById('example').append(generateHtml);

<table id="example" border="2"></table>
使用append时,需要传递DOM元素,而不仅仅是字符串。 使用.htmlgenerateHtml或.innerHTML=generateHtml.join或create节点,而不是使用append函数

范例

风险值数据={ 结果:[ { 名字:约翰, 姓:Doe,, 电邮:jdoe@mail.com }, { 名字:卢克, 姓:Doe,, 电邮:loe@mail.com }, { 名字:莎拉, 姓:Doe,, 电邮:sdoe@mail.com }, { 名字:七月, 姓:Doe,, 电邮:julydoe@mail.com }, { 名字:简, 姓:Doe,, 电邮:janedoe@mail.com } ] } var generateHtml=data.results.mapfunctionitem{ return+item.firstName+; }; document.getElementByIdexample.innerHTML=generateHtml.join;
您应该返回实际的元素对象:

let generateElements = data.results.map(function (item) {
    let row = document.createElement("tr");

    row.appendChild(document.createElement("td")).textContent =
        item.firstName;

    return row;
});
然后使用每个元素作为参数调用append:

document.getElementById("example").tBodies[0].append(...generateElements);
这样做的好处是可以保护您免受XSS和item.firstName中的此类攻击

如果您想支持不支持spread语法…generateElements的浏览器,最简单的方法可能是不使用append polyfilled或根本不使用append polyfilled:

var target = document.getElementById("example").tBodies[0];

data.results.forEach(function (item) {
    var row = document.createElement("tr");

    row.appendChild(document.createElement("td")).textContent =
        item.firstName;

    target.appendChild(row);
});

别忘了加入阵列。如果要返回字符串数组,则需要使用innerHTML,否则需要创建dom对象并手动附加它们

风险值数据={ 结果:[ { 名字:约翰, 姓:Doe,, 电邮:jdoe@mail.com }, { 名字:卢克, 姓:Doe,, 电邮:loe@mail.com }, { 名字:莎拉, 姓:Doe,, 电邮:sdoe@mail.com }, { 名字:七月, 姓:Doe,, 电邮:julydoe@mail.com }, { 名字:简, 姓:Doe,, 电邮:janedoe@mail.com } ] } var generateHtml=data.results.mapfunctionitem{ return+item.firstName+; } document.getElementById'example'.innerHTML=generateHtml.join;
我想您需要。减少,因为这将返回单个字符串。map将返回另一个数组。Where you seen.html和$?@DavidWaters,用于将浏览器支持仅限于使用实验性技术的用户@RokoC.Buljan:附加?最初的问题使用了它。