📅  最后修改于: 2023-12-03 15:25:24.406000             🧑  作者: Mango
在网站开发中,数据表是一种经常使用的组件,可以用来展示大量的数据,以及允许用户进行一些交互操作。
但在某些情况下,我们需要在表格中嵌套另一个表格,即嵌套表结构,以展现更加复杂的数据结构。本文将介绍如何使用 jQuery 和 Javascript 实现嵌套表格。
在开始编写代码之前,我们需要准备一份示例数据,如下所示:
let data = [
{ name: 'Mike', age: 26, phone: '123456', address: { city: 'New York', zipCode: '10001' } },
{ name: 'Jack', age: 35, phone: '234567', address: { city: 'Los Angeles', zipCode: '90001' } },
{ name: 'Emma', age: 21, phone: '345678', address: { city: 'Chicago', zipCode: '60601' } },
{ name: 'John', age: 29, phone: '456789', address: { city: 'Houston', zipCode: '77001' } }
];
其中,每个元素包含一个人的姓名、年龄、电话和地址信息,地址信息又包含城市和邮编两个字段。
在 HTML 中,我们需要两个表格,一个主表格用于展示人员信息,另一个嵌套表格用于展示地址信息。
主表格的结构如下:
<table id="mainTable">
<thead>
<tr>
<th>Name</th>
<th>Age</th>
<th>Phone</th>
<th>Address</th>
</tr>
</thead>
<tbody></tbody>
</table>
嵌套表格的结构如下:
<table class="nestedTable">
<tr>
<th>City</th>
<th>Zip Code</th>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</table>
我们首先需要使用 Javascript 将数据渲染到主表格中。渲染的过程包括创建表格行和单元格,并填充数据。
代码如下:
let mainTable = $('#mainTable tbody');
data.forEach(item => {
let newRow = $('<tr></tr>');
let nameCell = $('<td></td>').text(item.name);
let ageCell = $('<td></td>').text(item.age);
let phoneCell = $('<td></td>').text(item.phone);
let addressCell = $('<td></td>');
// 创建地址信息嵌套表格
let nestedTable = $('.nestedTable').clone();
nestedTable.removeClass('nestedTable').addClass('addressTable');
nestedTable.find('td:first').text(item.address.city);
nestedTable.find('td:last').text(item.address.zipCode);
addressCell.append(nestedTable);
newRow.append(nameCell, ageCell, phoneCell, addressCell);
mainTable.append(newRow);
});
在上述代码中,我们首先使用 jQuery 获取主表格的 tbody 元素,然后使用 forEach 方法对数据进行遍历,为每个元素创建表格行和单元格,并将数据填充到单元格中。
对于地址信息单元格,我们需要额外创建一个嵌套表格,设置嵌套表格中的数据,并将嵌套表格添加到单元格中。
当用户点击地址信息单元格时,我们需要展开或收起嵌套表格。我们可以在单元格上添加 click 事件来实现这个功能。
代码如下:
// 展开/收起嵌套表格
$(document).on('click', '.addressTable td', function(e) {
let nestedTable = $(this).closest('.addressTable').find('.nestedTable');
if (nestedTable.is(':visible')) {
nestedTable.hide();
} else {
nestedTable.show();
}
e.stopPropagation();
});
在上述代码中,我们通过选择器选中所有嵌套表格单元格。然后,当单元格被点击时,我们获取该单元格所在的嵌套表格,判断该嵌套表格的可见状态,并相应地调用 show 或 hide 方法切换其显示状态。
需要注意的是,在单元格上添加 click 事件时,需要调用 stopPropagation 方法阻止事件冒泡,否则嵌套表格的切换可能会触发多次。
通过本文的介绍,我们了解了如何使用 jQuery 和 Javascript 实现嵌套表格,并实现了嵌套表格的展开和收起功能。在实际应用中,我们可以根据需求对代码进行修改和扩展,以实现更加复杂的功能。