📜  如何从 DataTables 中的嵌套对象读取信息?(1)

📅  最后修改于: 2023-12-03 15:23:46.419000             🧑  作者: Mango

如何从 DataTables 中的嵌套对象读取信息?

DataTables 是一个常用的 JavaScript 数据表格插件,它可以在前端页面中实现数据表格的渲染、大数据分页和滚动、排序、查询、筛选等功能。在实际项目开发中,我们经常需要从 DataTables 中获取对应的数据,在进行一些文本操作或其他处理,特别是当我们需要读取嵌套对象(Nested Objects)时,需要注意一些问题。

在 DataTables 中,嵌套对象通常是指数组或 JSON 格式的数据,其中每个元素都是一个对象,对象属性中可能又嵌套了一层或多层对象。如果我们想要从嵌套对象中读取信息,可以采用以下的方法。

读取数组嵌套对象

首先,我们假设有一个数据表格,其中每一行都包含了一个对象(Object)数组数据,如下所示:

var demoData = [
  {
    "id": "1",
    "name": "张三",
    "age": 18,
    "address": [
      {"province": "北京", "city": "朝阳区", "street": "三里屯"},
      {"province": "浙江", "city": "杭州市", "street": "西湖景区"}
    ]
  },
  {
    "id": "2",
    "name": "李四",
    "age": 22,
    "address": [
      {"province": "上海", "city": "黄浦区", "street": "南京东路"},
      {"province": "江苏", "city": "南京市", "street": "夫子庙景区"}
    ]
  }
];

接下来,我们可以使用 jQuery DataTables 插件的遍历行函数(rows().data())来获取所有行的数据。然后,再对每个对象进行处理,先读取嵌套的 address 数据对象,再从中读取对应的 province、city 和 street 数据项。示例代码如下:

$(document).ready(function() {
  $('#demo-table').DataTable({
    data: demoData,
    columns: [
      { "data": "id" },
      { "data": "name" },
      { "data": "age" },
      { "data": "address" }
    ],
    "columnDefs": [
      {
        "targets": 3,
        "render": function (data, type, row, meta) {
          var addressData = '';
          for (var i = 0; i < data.length; i++) {
            var address = data[i];
            addressData += '<p>省份:' + address.province + '</p>';
            addressData += '<p>城市:' + address.city + '</p>';
            addressData += '<p>详细地址:' + address.street + '</p>';
          }
          return addressData;
        }
      }
    ]
  });
});

此时,我们可以在 HTML 页面中显示嵌套的地址信息,如下所示:

<table id="demo-table" class="display" style="width:100%">
  <thead>
    <tr>
      <th>ID</th>
      <th>名称</th>
      <th>年龄</th>
      <th>地址</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>
读取 JSON 嵌套对象

如果我们的数据表格中是 JSON 格式的嵌套对象,可以采用与数组嵌套对象相似的方法进行读取。下面是一个 JSON 数据示例,其中包含了嵌套的 address 和 contact 对象。

var demoData = [
  {
    "id": "1",
    "name": "张三",
    "age": 18,
    "address": {
      "province": "北京",
      "city": "朝阳区",
      "street": "三里屯"
    },
    "contact": {
      "tel": "010-12345678",
      "email": "zhangsan@qq.com"
    }
  },
  {
    "id": "2",
    "name": "李四",
    "age": 22,
    "address": {
      "province": "上海",
      "city": "黄浦区",
      "street": "南京东路"
    },
    "contact": {
      "tel": "021-87654321",
      "email": "lisi@163.com"
    }
  }
];

我们可以使用 jQuery DataTables 插件的 columns.render 函数来实现读取嵌套对象。其实现方式与读取数组嵌套对象类似,只需要对每个 JSON 对象进行属性读取即可。示例代码如下:

$(document).ready(function() {
  $('#demo-table').DataTable({
    data: demoData,
    columns: [
      { "data": "id" },
      { "data": "name" },
      { "data": "age" },
      {
        "data": "address",
        "render": function (data, type, row, meta) {
          return data.province + '-' + data.city + '-' + data.street;
        }
      },
      {
        "data": "contact",
        "render": function (data, type, row, meta) {
          return data.tel + '-' + data.email;
        }
      }
    ]
  });
});

此时,我们可以在 HTML 页面中显示嵌套的地址信息和联系方式,如下所示:

<table id="demo-table" class="display" style="width:100%">
  <thead>
    <tr>
      <th>ID</th>
      <th>名称</th>
      <th>年龄</th>
      <th>地址</th>
      <th>联系方式</th>
    </tr>
  </thead>
  <tbody></tbody>
</table>

以上是从 DataTables 中的嵌套对象读取信息的示例介绍,希望可以帮助到大家。