jquery从数组动态创建表

izkcnapc  于 2021-09-13  发布在  Java
关注(0)|答案(3)|浏览(290)

此问题已在此处找到答案

使用jquery和json数组创建html表(2个答案)
两天前关门了。
我当前正在尝试从数组创建表。数组的格式如下所示:

[
  {
    header: 'ID',
    values: [1, 2]
  },
  {
    header: 'First Name',
    values: ['John', 'Jayne']
  },
  {
    header: 'Last Name',
    value: ['Doe', 'Doe']
  }
]

我已经成功地创建了表的标题,但是对于从这个数组以这种方式从主体中进行渲染的位置或方式有点困惑。

const exampleArray = [
  {
    header: 'ID',
    values: [1, 2]
  },
  {
    header: 'First Name',
    values: ['John', 'Jayne']
  },
  {
    header: 'Last Name',
    values: ['Doe', 'Doe']
  }
];

const header = $('#results thead tr');
const body = $('#results tbody');

exampleArray.forEach((row) => {
  header.append(
    $(`<th>${row.header}</th>`)
  );
});
<table id="results">
<thead>
<tr>
  <!-- HEADERS -->
</tr>
</thead>
<tbody>

</tbody>
</table>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

我不确定这是否是最好的方法,也不确定是否值得在尝试呈现表之前将结果集Map为更可变的内容。

edqdpe6u

edqdpe6u1#

您可以调用中的元素 exampleArray 行,而它们实际上是列。这可能是产生混淆的原因。请参阅下面的代码片段以了解工作示例。

const exampleArray = [
  {
    header: 'ID',
    values: [1, 2]
  },
  {
    header: 'First Name',
    values: ['John', 'Jayne']
  },
  {
    header: 'Last Name',
    values: ['Doe', 'Doe']
  }
];

const header = $('#results thead tr');
const body = $('#results tbody');

exampleArray.forEach((column) => {
  header.append(
    $(`<th>${column.header}</th>`)
  );
});

// Compute the number of rows in the array
const nRows = exampleArray[0].values.length;

for (let i = 0; i < nRows; i++) {
  // row contains all cells in a row
  let row = $("<tr/>");
  // Loop over the columns
  exampleArray.forEach((column) => {
    // For each column, we add the i-th value, since we're building the i-th row
    row.append(`<td>${column.values[i]}</td>`);
  });
  // Add the row to the table body
  body.append(row);
}
<table id="results">
<thead>
<tr>
  <!-- HEADERS -->
</tr>
</thead>
<tbody>

</tbody>
</table>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
qkf9rpyu

qkf9rpyu2#

只需迭代数组的每个值项并将其附加到每列:

const exampleArray = [{
    header: 'ID',
    values: [1, 2]
  },
  {
    header: 'First Name',
    values: ['John', 'Jayne']
  },
  {
    header: 'Last Name',
    values: ['Doe', 'Doe']
  }
];

const header = $('#results thead tr');
const body = $('#results tbody');

exampleArray.forEach((row) => {
  header.append(
    $(`<th>${row.header}</th>`)
  );
});

// This does the magic

// Iterate up to the values length (row length)
for (var i = 0; i < exampleArray[0].values.length; i++) {
  // Create new row
  body.append("<tr id='row-" + i + "'></tr>");
  // Iterate all items (columns)
  exampleArray.forEach((column) => {
    // Append value to the row
    $("#row-" + i).append("<td>" + column.values[i] + "</td>");
  });
}
<table id="results">
  <thead>
    <tr>
      <!-- HEADERS -->
    </tr>
  </thead>
  <tbody>

  </tbody>
</table>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
jv4diomz

jv4diomz3#

你可以使用 for 循环进行迭代 0 长到 values 属性,并使用嵌套循环在每个单独项的索引处获取该项:

const tableData = [{
    header: 'ID',
    values: [1, 2]
  },
  {
    header: 'First Name',
    values: ['John', 'Jayne']
  },
  {
    header: 'Last Name',
    values: ['Doe', 'Doe']
  }
]

const header = $('#results thead tr');
const body = $('#results tbody');

tableData.forEach((row) => {
  header.append(
    $(`<th>${row.header}</th>`)
  );
});

for (let i = 0; i < tableData[0].values.length; i++) {
  var row = document.createElement("tr");
  tableData.forEach(f => $(row).append(`<td>${f.values[i]}</td>`));
  body.append(row);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table id="results">
  <thead>
    <tr id="headers">
    </tr>
  </thead>
  <tbody id="b">

  </tbody>
</table>

相关问题